我正在尝试在Silverlight 4 DataGrid上捕获mousewheel事件。问题是每当DataGrid处理mousewheel事件时,MouseWheel事件都不会触发。但是当DataGrid位于顶部并且我尝试向上滚动时,我得到了MouseWheel事件,底部也是同样的事情 - 即当DataGrid本身不处理MouseWheel事件时触发事件。
我还尝试在垂直ScrollBar上捕获mousewheel事件(Silverlight DataGrid不使用ScrollViewer)
我是否可以捕获MouseWheel事件,即使我还没有聚焦DataGrid(在聚焦DataGrid之前事件没有触发并且滚动不起作用)?或者我应该使用以下事件:
HtmlPage.Window.AttachEvent(“DOMMouseScroll”,OnMouseWheel); HtmlPage.Window.AttachEvent(“onmousewheel”,OnMouseWheel); HtmlPage.Document.AttachEvent(“onmousewheel”,OnMouseWheel);
任何帮助表示赞赏。谢谢。
答案 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