Clavier.Focus ne fonctionne pas sur zone de texte dans WPF

Je suis cogner ma tête sur ce qui ressemble à un problème simple à résoudre dans wpf, mais je n'ai pas encore découvert pourquoi je ne peux pas obtenir mon appli pour se comporter selon mon plan.

J'ai une petite boîte de recherche qui apparaît dans mon application wpf quand l'utilisateur appuie sur ctrl+f. Tout ce que je veux est pour le signe à clignoter à l'intérieur de la zone de recherche zone de texte, prêts à prendre toutes les entrées utilisateur sans que l'utilisateur ait à cliquer sur elle. Voici le code xaml de la zone de texte qui est visible, activé, frappé testable, tabstopable et peut recevoir le focus.

   <TextBox x:Name="SearchCriteriaTextBox" Text="{Binding SearchCriteria}" Focusable="True" IsEnabled="True" IsTabStop="True" IsHitTestVisible="True" Style="{DynamicResource SearchTextBoxStyle}" Grid.Column="1" Margin="5,10,0,5" />

Dans le code-behind, j'ai cette méthode est appelée lorsque la visibilité de la zone de recherche est affecté. la zone de recherche est chargé au démarrage de l'application.

    ///<summary>
    ///Handles events triggered from focusing on this view.
    ///</summary>
    ///<param name="sender">The sender.</param>
    ///<param name="dependencyPropertyChangedEventArgs">The key event args.</param>
    private void OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
    {
        if (!((bool) dependencyPropertyChangedEventArgs.NewValue))
        {
            return;
        }

        SearchCriteriaTextBox.Focus();
        Keyboard.Focus(SearchCriteriaTextBox);
        SearchCriteriaTextBox.Select(0, 0);

        if (SearchCriteriaTextBox.Text.Length > 0)
        {
            SearchCriteriaTextBox.SelectAll();
        }
    }

Le problème est que le code est appelé, composant devient IsFocused=vrai, mais ne pas obtenir le focus clavier.
Ai-je raté quelque chose? À moins qu'un autre contrôle maintient son emprise férocement pour le focus clavier dont je suis assez sûr que je n'ai pas de code, pourquoi cette pièce de plutôt simple code ne fonctionnerait pas correctement.

Essayez de faire ça après l'événement Chargé.
Je suppose que l'autre contrôle de la prise de focus après cette méthode est appelée. Peut-être que vous devriez mettre l'accent dans un autre cas.
J'ai une question: est Chargé événement se déclenche à chaque fois que la visibilité des changements?
Nope. Il se déclenche lorsque le contrôle est chargé, mais puisque vous ne poste pas assez de code pour savoir comment êtes-vous de la création ou de montrer votre contrôle, je suis juste deviner.
Votre code pour OnIsVisibleChanged effectivement résolu mon problème!

OriginalL'auteur legrandviking | 2012-12-19