2009-04-22 6 views
0

Als Antwort auf this question über Zoomen und Verschieben in WPF machte ich den Vorschlag, eine ScaleTransform zu verwenden und den RenderTransform-Ursprung im MouseMove-Ereignis zu aktualisieren. Das funktioniert, aber ich bin nicht glücklich damit, dass die Schwenkbewegung nicht ganz der Maus entspricht. Ich kann sehen, was das Problem mit diesem Algorithmus ist, aber die korrekte Implementierung entzieht sich mir weiter.Was ist falsch an diesem Bild-Panning-Algorithmus?

private void image_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (image.IsMouseCaptured) 
    { 
     Vector v = start - e.GetPosition(image); 
     // this calculates the deltas relative to the original size of the image 
     // but does not take into account the transformed size, but transforming the 
     // size like image.ActualWidth * scaleTransform.ScaleX does not help 
     double deltax = v.X/image.ActualWidth; 
     double deltay = v.Y/image.ActualHeight; 

     image.RenderTransformOrigin = new Point(orgin.X + deltax, orgin.Y + deltay); 
    } 
} 

Irgendwelche Ideen, wie ich diesen Ansatz arbeiten kann?

Antwort

1

Es ist ziemlich seltsam, dass es für Sie nicht funktioniert. Ich benutze eine ähnliche Methode für das Schwenken. Aber ich Do dividieren Sie das Delta von scaleTransform.ScaleX.

Der andere Unterschied ist, dass ich eine TranslateTransform zu der TransformGroup hinzufügen und X und Y der Übersetzung ändern, anstatt RenderTransformOrigin zu verwenden.

+0

Danke für den Zeiger, ich hätte eine TraslateTransform von Anfang an verwenden sollen, aber alles mit nur einer ScaleTransform zu tun, habe ich die Antwort auf die ursprüngliche Frage mit Ihrem Vorschlag aktualisiert. Vielen Dank. –