Je veux ajouter un comportement simple (du moins je pensais que c'était) à mon WPF TextBox
.
Lorsque l'utilisateur appuie sur Echap, je veux TextBox
que le texte qu'il édite ait le texte qu'il avait lorsque l'utilisateur a commencé à modifier, ET je veux supprimer le focus du TextBox
.
Je n'ai aucun problème à définir le texte pour la valeur qu'il avait au début de l'édition.
Le problème est de supprimer le focus de l'élément. Je ne veux pas déplacer le focus vers un autre composant, je veux juste le TextBox
perdre. Dois-je avoir un élément invisible pour définir le focus afin que je TextBox
puisse perdre le focus?
Keyboard.ClearFocus()
partir de code-behind après un clic quelque part.ClearFocus
faitGotFocus
de ne pas se déclencher pour le contrôle récemment focalisé alors qu'il se déclenche toujours pour d'autres contrôles. C'est un gros problème pour mon clavier à l'écran personnalisé, par exemple. Cela fait disparaître le signe d'insertion, ce qui est probablement tout ce que le "focus clavier" implique. Peut-être que je suis plus intéressé par quelque chose comme "focus souris".other.Focus()
.GotFocus
événement). Il y a toujours quelque chose avec une orientation logique dans votre programme. Utilisez l'LostKeyboardFocus
événement ou déplacez le focus vers un autre élément (qui déplace le focus logique avec lui) avant de supprimer le focus clavier.Le code que j'utilise:
la source
Un peu tard à la fête, mais cela m'a été utile alors voilà.
Depuis .Net 3.0,
FrameworkElement
a une fonction MoveFocus qui a fait l'affaire pour moi.la source
Étant donné qu'aucune des réponses ci-dessus n'a fonctionné pour moi et que la réponse acceptée ne fonctionne que pour un focus clavier, je suis arrivé à l'approche suivante:
Tue les deux, logique ainsi que le focus clavier.
la source
Vous pouvez définir le focus sur un ancêtre focalisable. Ce code fonctionnera même si la zone de texte se trouve dans un modèle sans ancêtres focalisables à l'intérieur de ce même modèle:
la source
AFAIK, il n'est pas possible de supprimer complètement la mise au point. Quelque chose dans votre fenêtre aura toujours le focus.
la source
Dans le développement de Windows Phone, je viens de le faire
Focus()
outhis.Focus()
dans la PhoneApplicationPage et cela a fonctionné comme un charme.la source
Pour moi, c'est assez délicat, en particulier lors de l'utilisation avec la liaison LostFocus. Cependant, ma solution de contournement consiste à ajouter une étiquette vide et à me concentrer dessus.
...
la source
Ma réponse ne répond pas directement à la question ci-dessus, cependant, je pense que le libellé de celui-ci l'a amenée à devenir "La question" sur la suppression programmatique de la concentration. Un scénario courant où cela est nécessaire est que l'utilisateur puisse effacer le focus en cliquant avec le bouton gauche sur l'arrière-plan d'un contrôle racine, comme une fenêtre.
Donc, pour y parvenir, vous pouvez créer un comportement attaché qui basculera le focus vers un contrôle créé dynamiquement (dans mon cas, une étiquette vide). Il est préférable d'utiliser ce comportement sur les éléments de plus haut niveau comme les fenêtres, car il parcourt ses enfants pour trouver un panneau auquel il peut ajouter une étiquette factice.
la source