【发布时间】:2020-07-25 04:29:28
【问题描述】:
我在画布 (InnerCanvas) 中有一个画布 (OuterCanvas),并且正在按如下方式处理放大和缩小:
private ScaleTransform ScaleTransform = new ScaleTransform();
private void OuterCanvas_MouseWheel(Object sender, MouseWheelEventArgs e)
{
if (e.Delta >= 1)
{
ScaleTransform.ScaleX += 0.03;
ScaleTransform.ScaleY += 0.03;
}
else
{
ScaleTransform.ScaleX -= 0.03;
ScaleTransform.ScaleY -= 0.03;
}
ScaleTransform.CenterX = ActualWidth / 2;
ScaleTransform.CenterY = ActualHeight / 2;
InnerCanvas.RenderTransform = TransformGroup;
}
这在画布的中心可以很好地放大和缩小。我想围绕鼠标指针进行放大和缩小,因此将CenterX 和CenterY 行更改如下:
ScaleTransform.CenterX = e.GetPosition(this).X;
ScaleTransform.CenterY = e.GetPosition(this).Y;
这再次令人满意,但是如果我尝试在两个缩放事件(鼠标滚轮事件)期间移动鼠标,整个画布会随着比例因子的增加或减少而剧烈地跳跃。
这与将CenterX 和CenterY 属性设置为ActualWidth/2 和ActualHeight/2 并更改窗口大小时的问题相同。
应该如何正确处理CenterX 和CenterY 属性以避免此问题?
【问题讨论】:
-
解决这个问题的一种方法是制作一个随时间平滑变化的动画。
-
谢谢,是的,我确实计划添加动画,但我宁愿解决根本问题,而不是让不正确的过渡看起来很平滑。
标签: c# wpf canvas scaletransform