WPF: un TextBox qui a un événement qui se déclenche lorsque vous appuyez sur la touche Entrée
Au lieu d'attacher une PreviewKeyUp
événement chaque TextBox
dans mon application et vérifier si la touche est la touche Entrée, puis faire une action, j'ai décidé de mettre en œuvre version étendue d'un TextBox
qui comprend un DefaultAction événement qui se déclenche lorsque la Touche Entrée est enfoncée dans un TextBox
.
Ce que j'ai fait était de créer une nouvelle Classe qui s'étend de TextBox
avec un événement public DefaultAction
comme tel:
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);
}
}
Je puis utiliser cette coutume zone de texte à partir de mon application comme tel (xaml):
<Controls:DefaultTextBoxControl DefaultAction="DefaultTextBoxControl_DefaultAction">
</Controls:DefaultTextBoxControl>
Maintenant, dans mon peu d'expérience que j'ai eu dans l'apprentissage de WPF, j'ai réalisé que presque la plupart du temps, il est plus "cool" (et, espérons-le plus facile) pour mettre en œuvre les choses
...donc ma question est, Comment puis-je améliorer le contrôle ci-dessus? Ou peut-être est-il un autre moyen que je peux faire la commande ci-dessus? ...peut-être en utilisant seulement déclarative de code au lieu de deux déclarative (xaml) et procédural (C#) ?
source d'informationauteur Andreas Grech
Vous devez vous connecter pour publier un commentaire.
Ont un coup d'oeil à ce blog de quelques mois où je me joindre a 'global' gestionnaire d'événement pour
TextBox.GotFocus
pour sélectionner le texte.Essentiellement que vous pouvez gérer le
KeyUp
événement dans votre Application de classe, comme ceci:... et maintenant, tous les
TextBox
dans votre application fera appel à laTextBox_KeyUp
méthode que les utilisateurs tapent dans.Mise à jour
Comme vous l'avez souligné dans votre commentaire, c'est utile seulement si tous les
TextBox
doit exécuter le même code.Pour ajouter l'arbitraire d'un événement comme une pression de touche Entrée, vous pourriez être mieux de regarder dans Des Événements Attachés. Je crois que cela peut vous obtenir ce que vous voulez.
Depuis que cette question a été posée, il y a maintenant un
InputBindings
de propriété sur les zones de texte et d'autres contrôles. Avec cela, purement XAML solution peut être utilisée, plutôt que d'utiliser des contrôles personnalisés. L'attributionKeyBinding
s pourReturn
etEnter
à point pour une commande peut le faire.Exemple:
Certains ont mentionné que
Enter
ne fonctionne pas toujours, etReturn
peut être utilisé sur certains systèmes.ajouter un événement dans
xaml
spécifique à la zone de texte ou l'objet:KeyDown="txtBarcode_KeyDown"
Lorsque l'utilisateur appuie sur la touche Entrée dans la zone de texte, la saisie dans la zone de texte s'affiche dans une autre zone de l'interface utilisateur (UI).
Le code XAML suivant crée l'interface utilisateur, qui se compose d'un StackPanel, un TextBlock, et une zone de texte.
Le code suivant derrière crée l'événement KeyDown gestionnaire. Si la touche pressée est la touche Entrée, un message est affiché dans le TextBlock.
Pour plus d'informations, lisez MSDN Doc