Я пишу приложение 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;
}
}
Почему бы вам не показать, что вы сделали кому-то другому, может оказаться полезным. Я понятия не имею, что * свойства CenterX/CenterY преобразования, о котором вы говорили. –