Mettre l’accent sur une zone de texte dans xaml wpf

Malgré certains messages sur ce forum et d’autres, je ne trouve pas quelque chose qui me dit comment définir le focus sur un TextBox .

J’ai un userControl avec de nombreux labels et textBox. Lorsque le formulaire est chargé, je souhaite que la zone de texte particulière ait le focus.

J’ai défini l’index tabIndex mais cela ne semblait pas fonctionner.

Aucune suggestion?

Vous pouvez utiliser la propriété jointe FocusManager.FocusedElement à cette fin. Voici un morceau de code qui définit le focus sur TxtB par défaut.

     

Vous pouvez également utiliser TxtB.Focus() dans votre code-behind si vous ne voulez pas le faire dans XAML.

Vous pouvez appliquer cette propriété directement sur la zone de texte:

  

Je ne suis pas habitué à utiliser WPF et à lire les exemples ci-dessus J’ai eu une expérience similaire en essayant de définir le focus sur une zone de texte en utilisant les exemples de code xaml donnés, c.-à-d.

J’ai découvert que je devais placer le FocusManager.FocusElement dans l’élément de page. Je suppose que cela fonctionnerait probablement aussi si vous utilisiez une fenêtre comme élément parent. En tout cas, voici le code qui a fonctionné pour moi.

     

lier l’élément que vous voulez pointer le focus comme

 FocusManager.FocusedElement= "{Binding ElementName= Comobox1}" 

en grid ou groupbox etc

FocusManager n’était pas dans intellisense et cela m’a un peu troublé. Je viens de taper l’atsortingbut entier et cela a fonctionné.

FocusManager.FocusedElement = “{Liaison ElementName = MyTextBox}”


Microsoft Visual Studio Enterprise 2015 version 14.0.23107.0/C#/WPF

Pour être complet, il existe également un moyen de gérer cela depuis le code derrière (par exemple, dans le cas de contrôles qui, pour une raison quelconque, sont créés dynamicment et n’existent pas dans XAML). Attachez un gestionnaire à l’événement Loaded de la fenêtre, puis utilisez la méthode “.Focus ()” du contrôle souhaité. Exemple Bare-Bones ci-dessous.

 public class MyWindow { private VisualCollection controls; private TextBox textBox; // constructor public MyWindow() { controls = new VisualCollection(this); textBox = new TextBox(); controls.Add(textBox); Loaded += window_Loaded; } private void window_Loaded(object sender, RoutedEventArgs e) { textBox.Focus(); } }