La RoutedEvent
classe définit statiques UIElement membres MouseLeftButtonDownEvent
et MouseLeftButtonUpEvent
- mais il n'y a pas MouseMoveEvent
. Pour autant que je sache, aucune classe ne figure dans la hiérarchie du framework. Il y a la définition d'événement régulier:Pourquoi est-il pas mouseMoveEvent - ou, comment utiliser AddHandler pour l'événement de déplacement de la souris
public event MouseEventHandler MouseMove;
Vous pouvez donc écrire:
void AttachHandler(UIElement element)
{
element.MouseMove += OnMouseMove;
}
mais vous ne pouvez pas utiliser l'autre forme, ce qui vous permet de vous abonner à des événements, même traités:
void AttachHandler(UIElement element)
{
element.AddHandler(UIElement.MouseMoveEvent, new MouseEventHandler(OnMouseMove), true);
}
donc, ma question est double:
- Pourquoi n'y a-t-il aucun
MouseMoveEvent
défini quelque part? - Existe-t-il une solution de contournement qui vous permet d'obtenir une notification pour les événements MouseMove même lorsqu'ils sont gérés?
Modifier
Je vois que the MSDN docs acknowledge this as a limitation:
Une limitation de cette technique est que l'API AddHandler prend un paramètre de type RoutedEvent qui identifie l'événement routé en question. Tous les événements routés Silverlight ne fournissent pas d'identificateur RoutedEvent, et cette considération affecte donc les événements routés qui peuvent encore être gérés dans le cas traité.
Edit # 2
par @HansPassant, la réponse générale est que les événements "MouseMove" ne peuvent pas être marqués comme "manipulés", donc ils ont toujours bulle. Cela est vrai pour la TextBox, à l'exception d'un cas de bordure apparent: lorsque vous cliquez sur la zone de texte de la TextBox, activant ainsi la fonction glisser-sélectionner, les événements "MouseMove" ne sont plus déclenchés. Je n'ai aucune idée de pourquoi cela serait.
Remarque - pour tous les curieux - je suis en train d'écrire un comportement qui permet à l'utilisateur de glisser/déposer une zone de texte. Le contrôle TextBox intercepte les événements de la souris par défaut, afin de permettre la sélection de texte.
Vous pouvez utiliser 'UIElement.PreviewMouseMoveEvent'. –
@HamletHakobyan bien, ça n'existe pas non plus, dans Silverlight. Je suppose que c'est juste une de ces fonctionnalités que Silverlight n'a pas. Je suis toujours curieux de savoir quelle serait la meilleure solution, le cas échéant. – McGarnagle
oui, j'ai manqué tag. –