J'ai un TextBox
et un ToolBar
avec un Button
. Si je tape dans le TextBox
_ et je clique sur le Button
je veux que le TextBox
perde Focus
afin que la contraignante soit mise à jour. Je ne veux pas ajouter un UpdateSourceTrigger=PropertyChanged
à mon TextBox
. Mais au lieu de cela, lorsque je clique sur le Button
i Réinitialiser _ i Focus
à la fenêtre principale, alors que je suis toujours sur perd Focus
et met à jour les reliures.
J'ai essayé d'ajouter un OnClick
sur le bouton avec ce qui suit, mais cela ne semble pas fonctionner:
private void Button_Click(object sender, RoutedEventArgs e) {
FocusManager.SetFocusedElement(this, null);
}
Des conseils seraient appréciés.
Merci, raul
Le problème est que la barre d'outils place votre bouton dans un autre FocusManager.FocusScope
. Cela signifie que le Button
et le TextBox
peuvent recevoir la mise au point logique en même temps, chacune de sa propre portée. Ceci est normalement une bonne chose, puisque vous ne voulez généralement pas perdre votre objectif dans votre zone de fenêtre principale lorsque vous sélectionnez des éléments de menu et des boutons de la barre d'outils, mais dans votre cas, il empêche ce que vous faites de votre travail.
Bien que vous puissiez remplacer la propriété FocusManager.IsFocusScope
sur la barre d'outils et obtenir l'effet que vous souhaitez, ce n'est probablement pas le meilleur plan puisqu'il permettrait à toutes les autres boutons de la barre d'outils Volez également la mise au point de votre zone principale.
Au lieu de cela, vous pouvez utiliser l'une des solutions simples:
textBox.GetBindingExpression(TextBox.TextProperty).UpdateSource()
J'ai rencontré un problème similaire. Je dois éliminer une zone de texte lorsque l'entrée est enfoncée. Je finis avec ce code:
var scope = FocusManager.GetFocusScope(elem); // elem is the UIElement to unfocus
FocusManager.SetFocusedElement(scope, null); // remove logical focus
Keyboard.ClearFocus(); // remove keyboard focus
Je pense qu'il est plus propre que de créer des contrôles factices et il est réutilisable. Je ne suis pas confiant avec cette solution cependant. Mais cela semble bien fonctionner.