protected override void HandleMouseWheel(object sender, MouseWheelEventArgs e)
{
if (!Keyboard.IsKeyDown(Key.LeftCtrl) && !Keyboard.IsKeyDown(Key.RightCtrl)) return;
mouseMode = MouseMode.Zooming;
var zoom = e.Delta > 0 ? .2 : -.2;
if (!(e.Delta > 0) && (ScaleTransform.ScaleX < .4 || ScaleTransform.ScaleY < .4))
return;
var elementsToZoom = new List<UIElement>();
elementsToZoom.AddRange(Children.OfType<Border>());
elementsToZoom.AddRange(Children.OfType<Ellipse>());
elementsToZoom.AddRange(Children.OfType<Path>());
foreach (var element in elementsToZoom)
{
element.UpdateLayout();
var position = e.GetPosition(element);
double width = 0;
double height = 0;
if (element is Border)
{
var border = element as Border;
width = border.ActualWidth;
height = border.ActualHeight;
}
else if (element is Ellipse)
{
var ellipse = element as Ellipse;
width = ellipse.ActualWidth;
height = ellipse.ActualHeight;
}
else if (element is Path)
{
var path = element as Path;
width = path.ActualWidth;
height = path.ActualHeight;
}
if (width > 0 && height > 0)
{
element.RenderTransformOrigin = new Point(position.X/width, position.Y/height);
}
}
ScaleTransform.ScaleX += zoom;
ScaleTransform.ScaleY += zoom;
mouseMode = MouseMode.Nothing;
}