【发布时间】:2014-04-09 15:32:37
【问题描述】:
所以这是我的问题,我希望我能够以适当的方式提出。
简而言之:如何在WPF中平滑缩放?
详细说明:我正在 WPF 中编写一个 CAD 应用程序,当MouseWheel 事件被触发时,我正在重绘部分屏幕。
private void ModelWindowBorder_MouseWheel(object sender, MouseWheelEventArgs e)
{
var zoom = e.Delta > 0 ? 0.2 : -0.2;
// increase or decrease the scale by *zoom*
// Redraw Screen
// Apply TransformScale and etc.
}
实际上上面的代码可以工作,但我不满意有两个原因:
当我必须在屏幕上重绘大量视觉效果时,它会错过多个触发的
MouseWheel事件。因此,如果要在 一个大滚动 中触发 8 个 MouseWheel 事件,则只会触发其中的 4-5 个。这使得缩放有点慢。第二个原因可能根本与 WPF 无关。
var zoom = e.Delta > 0 ? 0.2 : -0.2;是我们应该增加/减少比例的正确方法吗?对我来说这似乎不合适。因为当我们缩小时,当我们放大一级时差异似乎很大,但是一旦我们靠近绘图,放大一级似乎并不多。
我想知道您对这两个问题的回答和意见。
【问题讨论】:
-
除非您向我们展示您对
zoom变量的实际操作,否则很难回答第二个问题。 -
@Clemens 我实际上将它添加到
ScaleTransform的 ScaleX/ScaleY 属性中,就像这样st.ScaleX += zoom; -
您可以改为乘以或除以
1.2等因子。 -
是的,我想我应该继续努力,但它在第一次尝试时给了我意想不到的结果。
-
我在一定程度上得到了这个工作。 @Clemens 你对第一个问题有什么建议吗?
标签: c# wpf zooming mousewheel