我正在构建SL应用程序,用于在布局中进行缩放和平移。一切都工作正常,除了当我使用鼠标滚轮放大,一些缩放滚动条开始使用鼠标滚轮后,我可以滚动不缩放。如果我把滚动条放在最后或开始,我只能再次缩放。如何防止scrollviewer使用鼠标滚轮?我希望缩放只能通过滚轮操作。提前谢谢!
当我缩放内容时,这是我的MouseWheel方法代码:
protected override void OnMouseWheel(MouseWheelEventArgs e)
{
base.OnMouseWheel(e);
if (e.Delta > 0)
{
this.aniScaleX.To += 0.2;
this.aniScaleY.To += 0.2;
this.sbScale.Begin();
}
else if (e.Delta < 0 && (this.aniScaleX.To > 1 && this.aniScaleY.To > 1))
{
this.aniScaleX.To -= 0.2;
this.aniScaleY.To -= 0.2;
this.sbScale.Begin();
}
Sizer.Width = Board.ActualWidth * (double)this.aniScaleX.To;
Sizer.Height = Board.ActualHeight * (double)this.aniScaleY.To;
答案 0 :(得分:4)
尝试设置:
e.Handled=true;
答案 1 :(得分:1)
MouseWheel事件是冒泡的 事件即可。这意味着如果多个 MouseWheel事件处理程序是 注册了一系列对象 由亲子关联 对象树中的关系, 每个人都可能收到一个事件 在这种关系中的对象。该 冒泡的比喻表明了 事件从源头开始并起作用 它在对象树上的方式。为一个 冒泡事件,发件人可用 到事件处理程序标识 处理事件的对象,而不是 必然是实际的对象 收到了输入条件 发起了这个活动。获得对象 发起事件,使用 事件的OriginalSource值 数据。 http://msdn.microsoft.com/en-us/library/system.windows.uielement.mousewheel(VS.95).aspx
就我而言,ScrollViewer之前总是收到事件,因为他位于可视化树的顶部。所以我刚刚在scrollviewer上注册了鼠标滚轮事件中的事件处理程序,并且总是当它发生时,我只是将它重定向到我的“原始”鼠标滚轮功能,它可以进行缩放。
我希望这能帮助那些像我一样“卡住”的人。谢谢大家的答案和建议。
答案 2 :(得分:1)
这花了我一段时间(WPF),但基本上你应该在任何有该事件的父UIElement中使用AddHandler。
对我来说,我是在MainWindow中做到的。所以我的代码看起来像:
public MainWindow()
{
InitializeComponent();
this.AddHandler(MainWindow.MouseWheelEvent, new RoutedEventHandler(this.MouseWheel_1), true);
}
这也意味着不会覆盖OnMouseWheelDown,而是创建一个匹配RoutedEventHandler委托并将e(将是RoutedEventArg)作为MouseWheelEventArg进行匹配的方法,以访问确定缩放所需的属性。
我希望这对你的情况有所帮助。