private void RotateRing_MouseMove(object sender, MouseEventArgs e) { Point p = e.GetPosition(this); double delta = (p.Y - startMousePos.Y); //added to correct left-side drag behavior if (p.X < this.ActualWidth / 2.0) delta *= -1; //end correction startMousePos = p; angle += delta; SetMapRotation(angle); }
private static void OnMapPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { Navigation nav = d as Navigation; Map map = e.NewValue as Map; Map oldmap = e.OldValue as Map; if (oldmap != null) { oldmap.RotationChanged -= nav.Map_RotationChanged; oldmap.ExtentChanged -= nav.Map_ExtentChanged; oldmap.ExtentChanging -= nav.Map_ExtentChanged; if (oldmap.Layers != null) oldmap.Layers.LayersInitialized -= nav.Layers_LayersInitialized; } if (map != null) { map.RotationChanged += nav.Map_RotationChanged; map.ExtentChanged += nav.Map_ExtentChanged; map.ExtentChanging += nav.Map_ExtentChanged; if (map.Layers != null) map.Layers.LayersInitialized += nav.Layers_LayersInitialized; if (nav.TransformRotate != null) nav.TransformRotate.Angle = map.Rotation; //Added for cases when Map binding is created after template is applied nav.SetupZoom(); //end correction } }