在DataGrid上阻止或捕获MouseWheel滚动

时间:2011-02-20 12:00:14

标签: silverlight silverlight-4.0 datagrid

我正在尝试在Silverlight 4 DataGrid上捕获mousewheel事件。问题是每当DataGrid处理mousewheel事件时,MouseWheel事件都不会触发。但是当DataGrid位于顶部并且我尝试向上滚动时,我得到了MouseWheel事件,底部也是同样的事情 - 即当DataGrid本身不处理MouseWheel事件时触发事件。

我还尝试在垂直ScrollBar上捕获mousewheel事件(Silverlight DataGrid不使用ScrollViewer)

  1. 如何阻止滚动?
  2. 如果我不阻止滚动 - 如何在所有情况下捕获事件?
  3. 我是否可以捕获MouseWheel事件,即使我还没有聚焦DataGrid(在聚焦DataGrid之前事件没有触发并且滚动不起作用)?或者我应该使用以下事件:

    HtmlPage.Window.AttachEvent(“DOMMouseScroll”,OnMouseWheel); HtmlPage.Window.AttachEvent(“onmousewheel”,OnMouseWheel); HtmlPage.Document.AttachEvent(“onmousewheel”,OnMouseWheel);

  4. 任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:1)

阻止滚动,你可以从DataGrid派生并覆盖OnMouseWheel。

public class MyDataGrid :DataGrid
    {
        protected override void OnMouseWheel(MouseWheelEventArgs e)
        {
            e.Handled = true;
        }
    }

如果要在UIElement上获取所有事件,可以使用AddHandler方法执行此操作,您可以在其中设置标记以获取处理事件。这是一个例子:

protected override void OnMouseWheel(MouseWheelEventArgs e)
        {
            Application.Current.RootVisual.AddHandler(MouseWheelEvent, new MouseWheelEventHandler(MyHandler), true);
            e.Handled = true;
        }

        void MyHandler(object sender, MouseWheelEventArgs args)
        {

        }

我希望这会有所帮助。

BR,

TJ