【问题标题】:Have something wrong when using matrixtransform for zooming and panning in WPF在 WPF 中使用 matrixtransform 进行缩放和平移时出现问题
【发布时间】:2017-05-07 09:49:50
【问题描述】:

我在here 有一个项目。我使用 matrixtransform 进行缩放和平移。他们按我的预期工作。运行的时候有两个麻烦。

  1. 我在缩放画布上的所有对象然后平移它们时发现了一些错误。移动光标的距离与平移时移动所有对象的距离不同。我认为我的错误是我的项目中使用了matrixtransform(可能是平移功能的matrixtransform的比例效应因素),但我无法解决。

代码隐藏:

-这是我的平移功能代码:

private void canvas01_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.MiddleButton == MouseButtonState.Pressed)
            {
                canvas01.Cursor = Cursors.SizeAll; //set mouse shape is panning type

                var lsPoint = e.GetPosition(this);
                var res = lsPoint - firstPoint;

                foreach (UIElement element in canvas01.Children)
                {
                    var transform = element.RenderTransform as MatrixTransform;
                    var matrix = transform.Matrix;
                    matrix.TranslatePrepend(res.X, res.Y);
                    transform.Matrix = matrix;
                }

                //udate first point
                firstPoint = lsPoint;
            }
        }

-这是我的放大/缩小功能代码:

private void canvas01_MouseWheel(object sender, MouseWheelEventArgs e)
        {
            foreach (UIElement element in canvas01.Children)
            {
                //var element = sender as UIElement;
                var position = e.GetPosition(element);
                var transform = element.RenderTransform as MatrixTransform;
                var matrix = transform.Matrix;
                var scale = e.Delta >= 0 ? 1.1 : (1.0 / 1.1); // choose appropriate scaling factor

                matrix.ScaleAtPrepend(scale, scale, position.X, position.Y);
                transform.Matrix = matrix;
            }
        }
  1. 我想通过一个按钮在画布上显示所有对象(如果对象通过缩放隐藏)。但是我不知道怎么用C#写一个缩放范围点击函数(可以在MainWindow.xaml的56行看到)。

请在这些情况下给我建议,感谢您的建议!

【问题讨论】:

    标签: c# wpf canvas


    【解决方案1】:

    我相信您需要的是布局转换或渲染转换。这是两者的比较:

    http://blog.scottlogic.com/2008/12/19/layouttransform-vs-rendertransform-whats-the-difference.html

    它们的行为略有不同,但它们应该满足您的需求并在您的项目中解决。

    【讨论】:

    • 感谢您的回复。我读了这篇文章,但我仍然没有找到预期的答案。很清楚我是否有你的代码。
    • 以后请发表cmets等建议。答案仅用于答案,它们应该是描述性的 - 不仅仅是链接。
    • 当时做不到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多