【发布时间】:2017-05-07 09:49:50
【问题描述】:
我在here 有一个项目。我使用 matrixtransform 进行缩放和平移。他们按我的预期工作。运行的时候有两个麻烦。
- 我在缩放画布上的所有对象然后平移它们时发现了一些错误。移动光标的距离与平移时移动所有对象的距离不同。我认为我的错误是我的项目中使用了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;
}
}
- 我想通过一个按钮在画布上显示所有对象(如果对象通过缩放隐藏)。但是我不知道怎么用C#写一个缩放范围点击函数(可以在MainWindow.xaml的56行看到)。
请在这些情况下给我建议,感谢您的建议!
【问题讨论】: