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
}
}