La classe UIElement definisce statici RoutedEvent
membri MouseLeftButtonDownEvent
e MouseLeftButtonUpEvent
- ma non c'è MouseMoveEvent
. Per quanto ne so, nemmeno una classe nella gerarchia del framework. V'è la definizione appuntamento fisso:Perché non compare alcuna MouseMoveEvent - o, come utilizzare AddHandler per l'evento del mouse mossa
public event MouseEventHandler MouseMove;
Così si può scrivere:
void AttachHandler(UIElement element)
{
element.MouseMove += OnMouseMove;
}
, ma non è possibile utilizzare l'altra forma, che permette di iscriversi agli eventi, anche trattati:
void AttachHandler(UIElement element)
{
element.AddHandler(UIElement.MouseMoveEvent, new MouseEventHandler(OnMouseMove), true);
}
Quindi la mia domanda è duplice:
- Perché non esiste un numero
MouseMoveEvent
definito da nessuna parte? - Esiste una soluzione alternativa che consente di ricevere una notifica per gli eventi MouseMove anche quando vengono gestiti?
Modifica
vedo che the MSDN docs acknowledge this as a limitation:
Una limitazione di questa tecnica è che l'API AddHandler accetta un parametro di tipo RoutedEvent che identifica l'evento indirizzato in questione. Non tutti gli eventi di instradamento di Silverlight forniscono un identificatore RoutedEvent e questa considerazione influisce su quali eventi instradati possono ancora essere gestiti nel caso Handled.
Modifica # 2
Per @HansPassant, la risposta generale è che "MouseMove" eventi non possono essere contrassegnati come "gestito", così hanno sempre bolla. Questo è vero per il TextBox, eccetto per un caso di bordo apparente: quando fai clic sull'area di testo del TextBox, attivando così la cosa da trascinare per selezionare, gli eventi "MouseMove" non vengono più attivati. Non ho idea del perché sarebbe.
Nota - per chiunque sia curioso - Sto cercando di scrivere un comportamento che permette all'utente di drag/drop un TextBox. Il controllo TextBox intercetta gli eventi del mouse per impostazione predefinita, al fine di consentire la selezione del testo.
È possibile utilizzare 'UIElement.PreviewMouseMoveEvent'. –
@HamletHakobyan bene, che non esiste neanche, in Silverlight. Immagino che questa sia solo una di quelle funzioni che Silverlight non ha. Sono ancora curioso di sapere quale sarebbe la soluzione migliore, se esiste. – McGarnagle
sì, ho perso il tag. –