Comment puis-je faire un contrôle perdre le focus si l'utilisateur clique sur quelque chose qui ne focusable?

StackOverflow https://stackoverflow.com/questions/2298913

  •  21-09-2019
  •  | 
  •  

Question

J'ai un ItemsControl rempli de dizaines d'articles; chaque élément est une zone de texte lié et quelques boutons. Parce que je veux que l'utilisateur de pouvoir onglet de zone de texte zone de texte, les boutons ont mis Focusable sur False. Cela fonctionne très bien. Le seul problème est que, puisque les zones de texte ne sont pas perdre de vue, leur liaison ne soit pas mise à jour de la source, de sorte que le code derrière les boutons ne fonctionne pas avec les bonnes valeurs.

Je peux penser à un moyen de résoudre ce problème, par exemple ayant le gestionnaire Cliquez pour les boutons naviguer dans l'arborescence logique de leur zone de texte associé et la fabrication est mise à jour obligatoire explicitement la source. Mais il me semble qu'il doit y avoir une meilleure façon que cela, ce qui serait probablement évident pour moi si j'avais une meilleure compréhension du modèle de mise au point. Est-il?

Était-ce utile?

La solution

Comme la performance est un problème, vous trouverez peut-être un de href="http://www.codeproject.com/KB/WPF/commandgroup.aspx" écrit par Josh Smith utile. Le contexte est très similaire à votre problème. Josh résout en déclenchant la mise à jour de liaison manuellement:

    TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
    if (focusedTextBox == null)
        return;

    BindingExpression textBindingExpr = 
      focusedTextBox.GetBindingExpression(TextBox.TextProperty);
    if (textBindingExpr == null)
        return;

    textBindingExpr.UpdateSource();

Autres conseils

Si la performance permet, vous pouvez changer le UpdateSourceTrigger de ces éléments TextBox à PropertyChanged au lieu de LostFocus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top