Invece di collegare un evento PreviewKeyUp
con ogni nella mia app e controllare se il tasto premuto era un tasto Invio e quindi eseguire un'azione, ho deciso di implementare la versione estesa di un TextBox
che include un evento DefaultAction che si attiva quando viene premuto un tasto Invio in un TextBox
.WPF: un TextBox che ha un evento che si attiva quando si preme il tasto Invio
Quello che ho fatto è stato fondamentalmente creare una nuova classe che si estende da TextBox
con un evento pubblico DefaultAction
, come ad esempio:
public class DefaultTextBoxControl:TextBox
{
public event EventHandler<EventArgs> DefaultAction = delegate { };
public DefaultTextBoxControl()
{
PreviewKeyUp += DefaultTextBoxControl_PreviewKeyUp;
}
void DefaultTextBoxControl_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key != Key.Enter)
{
return;
}
DefaultAction(this, EventArgs.Empty);
}
}
Ho quindi utilizzare questo campo testo personalizzato dal mio app come tale (XAML):
<Controls:DefaultTextBoxControl DefaultAction="DefaultTextBoxControl_DefaultAction">
</Controls:DefaultTextBoxControl>
Ora nella mia piccola esperienza che ho avuto in apprendimento WPF mi sono reso conto che quasi la maggior parte del tempo c'è un "più fresco" (e, si spera più facile) wa y per implementare le cose
... quindi la mia domanda è, Come posso migliorare il controllo di cui sopra? O forse c'è un altro modo in cui posso fare il controllo di cui sopra? ... magari usando solo il codice dichiarativo invece di entrambi dichiarativo (xaml) e procedurale (C#)?
Ma con questo, come si fa assegnare cosa succede quando si preme il tasto di invio? perché ogni TextBox fa qualcosa di diverso –
Oh! Aggiornerò la risposta –
la migliore risposta! –