Comment définir le focus sur un TextBox
élément dans WPF
J'ai ce code:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...Mais ça ne fonctionne pas.
Une idée?
Comment définir le focus sur un TextBox
élément dans WPF
J'ai ce code:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
...Mais ça ne fonctionne pas.
Une idée?
Réponses:
En XAML:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
Personne n'a expliqué jusqu'à présent pourquoi le code de la question ne fonctionne pas. Je suppose que le code a été placé dans le constructeur de la fenêtre. Mais pour le moment, il est trop tôt pour se concentrer. Cela doit être fait une fois que la fenêtre est prête pour l'interaction. Le meilleur endroit pour le code est l'événement Loaded:
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
Focus()
nécessite un paramètre d'état de mise au point - par exempletxtCompanyId.Focus(FocusState.Keyboard)
essayez FocusManager.SetFocusedElement
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);
msdn:
Il ne peut y avoir qu'un seul élément sur l'ensemble du bureau qui a le focus clavier. Dans WPF, l'élément qui a le focus clavier aura IsKeyboardFocused défini sur true.
Vous pouvez interrompre après la ligne de réglage et vérifier la valeur de la IsKeyboardFocused
propriété. Vérifiez également si vous atteignez vraiment cette ligne ou si vous définissez un autre élément pour vous concentrer après cela.
Essaye ça : MyTextBox.Focus ( );
Rien de tout cela n'a fonctionné pour moi car j'utilisais une grille plutôt qu'un StackPanel.
J'ai finalement trouvé cet exemple: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
et l'a modifié en ceci:
Dans la section 'Ressources':
<Style x:Key="FocusTextBox" TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=textBoxName, Path=IsVisible}" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=textBoxName}"/>
</DataTrigger>
</Style.Triggers>
</Style>
Dans ma définition de grille:
<Grid Style="{StaticResource FocusTextBox}" />
Au cas où vous n'auriez pas trouvé la solution sur les autres réponses, c'est ainsi que j'ai résolu le problème.
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TEXTBOX_OBJECT.Focus();
}), System.Windows.Threading.DispatcherPriority.Render);
D'après ce que je comprends, les autres solutions peuvent ne pas fonctionner car l'appel à Focus()
est appelé avant que l'application n'ait rendu les autres composants.
Une autre solution possible consiste à utiliser FocusBehavior fourni par DevExpress MVVM Framework gratuit :
<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
Il vous permet de focaliser un contrôle lorsqu'il est chargé, lorsqu'un certain événement est déclenché ou qu'une propriété est modifiée.
Dans Code behind, vous ne pouvez y parvenir qu'en faisant cela.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
txtIndex.Focusable = true;
txtIndex.Focus();
}
Remarque: cela ne fonctionnera pas avant le chargement de la fenêtre