ScrollViewer 的 MouseWheel 事件仅在滚动条位于其轨道的末端(顶部或底部/左侧或右侧)时才会触发。MouseWheel 事件在介于两者之间时不会触发。
有没有人知道如何在鼠标滚轮引起滚动时捕获滚动?
ScrollViewer 的 MouseWheel 事件仅在滚动条位于其轨道的末端(顶部或底部/左侧或右侧)时才会触发。MouseWheel 事件在介于两者之间时不会触发。
有没有人知道如何在鼠标滚轮引起滚动时捕获滚动?
滚动查看器实际上是在触发事件。该事件正在处理中,因此不会调用处理程序。解决这个问题的方法是使用 AddHandler 方法来添加处理程序。
不要使用UIElement.MouseWheel Event,而是使用UIElement.AddHandler 方法,如下所示:
MyScrollViewer.AddHandler(FrameworkElement.MouseWheelEvent,
delegate(object sender, MouseWheelEventArgs e)
{
//if e.Handled == true then the page was actually scrolled,
// otherwise, the scrollviewer is either at the beginning or at the end
if (e.Handled == true)
{
//Here, you can do what you need
}
},
true);
您需要添加以下代码来捕获滚动事件
public MainPage()
{
InitializeComponent();
HtmlPage.Window.AttachEvent("DOMMouseScroll", OnMouseWheel);
HtmlPage.Window.AttachEvent("onmousewheel", OnMouseWheel);
HtmlPage.Document.AttachEvent("onmousewheel", OnMouseWheel);
}
private void OnMouseWheel(object sender, HtmlEventArgs args)
{
// Your code goes here
}
要真正使完整滚动正常工作(不会弄乱鼠标滚轮事件),请参阅我对这个问题的回答 -如何让鼠标滚轮与 Silverlight 4 ScrollViewer 一起正常工作
@大卫1234:
public delegate void SVMouseWheelDelegate(object sender, MouseWheelEventArgs e);
public SVMouseWheelDelegate SVMouseWheelHandler { get; set; }
private void SVMouseWheelHandlerLogic(object sender, MouseWheelEventArgs e)
{
//if e.Handled == true then the page was actually scrolled,
// otherwise, the scrollviewer is either at the beginning or at the end
if (e.Handled == true)
{
//Here, you can do what you need
}
}
并像这样使用它:
MyScrollViewer.AddHandler(FrameworkElement.MouseWheelEvent, SVMouseWheelHandler, true);