2010-06-04 4 views
1

L'événement MouseWheel de ScrollViewer se déclenche uniquement lorsque la barre de défilement se trouve à la fin de sa piste (en haut ou en bas/à gauche ou à droite). L'événement MouseWheel ne se déclenche pas lorsqu'il se trouve entre les deux.ScrollViewer ne déclenche pas l'événement MouseWheel pendant le défilement

Est-ce que quelqu'un a la moindre idée de la façon de capturer le défilement lorsqu'il est provoqué par la roulette de la souris?

Répondre

1

Vous devez ajouter le code suivant pour capturer l'événement de défilement

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 
     } 

Référence: http://blog.thekieners.com/2009/04/06/how-to-enable-mouse-wheel-scrolling-in-silverlight-without-extending-controls/

Pour obtenir effectivement le défilement complet fonctionne correctement (sans déconner avec les événements mouseWheel), voir ma réponse à cette question - How can I get the mouse wheel to work correctly with the Silverlight 4 ScrollViewer

+0

Je n'ai aucun problème capture du défilement de la molette de la souris. Mon problème spécifique est que l'événement scroll ne se déclenche pas avant que l'une des deux limites ait été atteinte. Tout ce qui se trouve entre les deux ne provoque pas le déclenchement de la roulette de la souris. – beaudetious

+0

Le code ci-dessus se déclenche sur chaque roulette de la souris pour moi (dans Firefox) pas seulement quand le pouce est à la limite. – Chaitanya

1

La visionneuse de défilement déclenche réellement l'événement. L'événement est géré, par conséquent, le gestionnaire ne sera pas appelé. La solution consiste à utiliser la méthode AddHandler pour ajouter le gestionnaire.

Au lieu d'utiliser le UIElement.MouseWheel Event, utilisez le UIElement.AddHandler method, comme ceci:

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); 
+0

Cela a fonctionné pour moi, merci. Je ne comprends pas pourquoi l'événement MouseWheel est parfois manipulé (quand il ne frappe pas en haut ou en bas). Pourriez-vous expliquer cela? – gitsitgo

0

@ davidle1234:

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 
     } 
    } 

et de l'utiliser comme ceci:

MyScrollViewer.AddHandler(FrameworkElement.MouseWheelEvent, SVMouseWheelHandler, true); 
Questions connexes