ScrollViewer の MouseWheel イベントは、スクロールバーがトラックの最後 (上または下/左または右) にある場合にのみ発生します。その中間にある場合、MouseWheel イベントは発生しません。
マウスホイールが原因でスクロールが発生しているときにスクロールをキャプチャする方法についての手がかりはありますか?
ScrollViewer の MouseWheel イベントは、スクロールバーがトラックの最後 (上または下/左または右) にある場合にのみ発生します。その中間にある場合、MouseWheel イベントは発生しません。
マウスホイールが原因でスクロールが発生しているときにスクロールをキャプチャする方法についての手がかりはありますか?
スクロール イベントをキャプチャするには、次のコードを追加する必要があります。
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
}
(マウスホイール イベントをいじることなく) 実際に完全なスクロールを適切に機能させるには、この質問に対する私の回答を参照してください - How can I get the mouse wheel to work correctly with the Silverlight 4 ScrollViewer
スクロール ビューアが実際にイベントを発生させています。イベントは処理中のため、ハンドラは呼び出されません。これを回避するには、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);
@ダビドル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);