1

ScrollViewer 的 MouseWheel 事件仅在滚动条位于其轨道的末端(顶部或底部/左侧或右侧)时才会触发。MouseWheel 事件在介于两者之间时不会触发。

有没有人知道如何在鼠标滚轮引起滚动时捕获滚动?

4

3 回答 3

1

滚动查看器实际上是在触发事件。该事件正在处理中,因此不会调用处理程序。解决这个问题的方法是使用 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);
于 2010-06-24T03:57:06.973 回答
1

您需要添加以下代码来捕获滚动事件

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
      }

参考:http ://blog.thekieners.com/2009/04/06/how-to-enable-mouse-wheel-scrolling-in-silverlight-without-extending-controls/

要真正使完整滚动正常工作(不会弄乱鼠标滚轮事件),请参阅我对这个问题的回答 -如何让鼠标滚轮与 Silverlight 4 ScrollViewer 一起正常工作

于 2010-06-07T06:43:45.960 回答
0

@大卫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);
于 2010-07-30T06:24:16.630 回答