Я пишу приложение WPF, которое отображает объект XAML (это в основном карта, нарисованная в XAML). Как часть его функций, он должен увеличивать / уменьшать и панорамировать. Панорамирование работает отлично, и масштабирование увеличивается, но я не совсем понимаю, как увеличить масштаб до определенной точки, например, моего курсора мыши.
Это мой текущий код:
internal void PerformZoom(float ZoomFactor, Point ZoomCenterPoint)
{
m_originalTransform = m_canvas.RenderTransform;
float newZoomFactor = m_oldZoomFactor + ZoomFactor;
float scaleToApply = (newZoomFactor / m_oldZoomFactor);
m_totalZoom = newZoomFactor;
var st = new ScaleTransform(scaleToApply, scaleToApply);
TransformGroup tg = new TransformGroup();
tg.Children.Add(m_originalTransform);
tg.Children.Add(st);
m_canvas.RenderTransform = tg;
m_oldZoomFactor = newZoomFactor;
}
[править] Нашли решение - Просто отредактировали свойства преобразования CenterX / CenterY, и это сработало как шарм.
Спасибо за вашу помощь!
[edit2] Вот жизнеспособное решение (с учетом положения мыши):
public partial class MainWindow
{
private float currentZoom = 1f;
private const float StepSize = .2f;
public MainWindow()
{
InitializeComponent();
}
private void MainGrid_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
var pos = 1;
if (e.Delta < 0)
{
pos = -1;
}
var mousePosition = e.MouseDevice.GetPosition(MainGrid);
currentZoom += StepSize * pos;
var transform = new ScaleTransform(currentZoom, currentZoom, mousePosition.X, mousePosition.Y);
MainGrid.RenderTransform = transform;
}
}