0

针对这个关于 WPF 中缩放和平移的问题,我建议使用 ScaleTransform 并在 MouseMove 事件中更新 RenderTransform 原点。这可行,但我对平移运动与鼠标不完全匹配的事实不满意。我可以看到这个算法的问题是什么,但正确的实现仍然让我望而却步。

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);
    }
}

关于如何使这种方法起作用的任何想法?

4

1 回答 1

1

很奇怪,它对你不起作用。我正在使用类似的方式进行平移。但我确实将增量除以 scaleTransform.ScaleX。

另一个区别是我向 TransformGroup 添加了一个 TranslateTransform 并修改了平移的 X 和 Y,而不是使用 RenderTransformOrigin。

于 2009-04-22T16:17:27.043 回答