Zoom sur position du pointeur dans ViewBox
Hello les gens ^^
Je n'arrive pas à zoomer et dézoomer sur la position de mon pointeur, j'ai essayer plusieurs méthodes mais aucunes n'a fonctionnée ..
Le besoin est lorsque j'effectue un coup de roulette dans mon canvas, ma ViewBox (contenue dans un ScrollViewer) s'ajuste afin de se centrer sur le pointeur et l'inverse lorsque je met un coup de roulette dans l'autre sens. A savoir que mon zoom fonctionne très bien sinon ^^ .
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| private void WorkSpace_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
//Récupération position souris
lastMousePos = Mouse.GetPosition(MyCanvas);
// Sauvegarde position souris actuelle
lastMousePos.X = lastMousePos.X - scrViewer.HorizontalOffset;
lastMousePos.Y = lastMousePos.Y - scrViewer.VerticalOffset;
// Application du zoom
if (e.Delta > 0)
{
double Zoom = ZoomSlider.Value;
double CenterX = this.ActualWidth / 2; //Centre du canvas en X
double CenterY = this.ActualHeight / 2; //Centre du canvas en Y
scrViewer.ScrollToHorizontalOffset(lastMousePos.X + CenterX);
scrViewer.ScrollToVerticalOffset(lastMousePos.Y + CenterY);
//double scrV_H = double.Parse(scrViewer.HorizontalAlignment.ToString());
//double scrV_V = double.Parse(scrViewer.VerticalAlignment.ToString());
ZoomSlider.Value *= PasZoom;// += OFFSET_ZOOM;
//scrViewer.HorizontalContentAlignment = CenterX - lastMousePos.X;
//scrViewer.Height = CenterY - lastMousePos.Y;
//scrViewer.HorizontalAlignment = lastMousePos.X;
//scrViewer.VerticalAlignment = lastMousePos.Y;
}
else
{
ZoomSlider.Value /= PasZoom;//-= OFFSET_ZOOM;
}
} |
Please Help :)