Как установить фокус на элементе TextBox
в WPF
У меня есть этот код:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
... но он не работает.
Любая идея?
Как установить фокус на элементе TextBox
в WPF
У меня есть этот код:
txtCompanyID.Focusable = true;
txtCompanyID.Focus();
... но он не работает.
Любая идея?
В XAML:
<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
<TextBox Name="Box" />
</StackPanel>
попробуйте FocusManager.SetFocusedElement
FocusManager.SetFocusedElement(parentElement, txtCompanyID)
Пока никто не объяснил, почему код в вопросе не работает. Я предполагаю, что код был помещен в конструктор окна. Но в это время слишком рано устанавливать фокус. Это нужно сделать, как только Окно будет готово к взаимодействию. Лучшим местом для кода является событие Loaded:
public KonsoleWindow() {
public TestWindow() {
InitializeComponent();
Loaded += TestWindow_Loaded;
}
private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
txtCompanyID.Focus();
}
}
txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);
MSDN:
Может быть только один элемент на весь рабочий стол с клавиатурой. В WPF элемент с клавиатурой фокус будет иметь набор IsKeyboardFocused к true.
Вы можете прорваться после строки настройки и проверить значение свойства IsKeyboardFocused
. Также проверьте, действительно ли вы достигли этой строки, или, может быть, вы установите другой элемент, чтобы получить фокус после этого.
Попробуйте следующее: MyTextBox.Focus ( );
Ничего из этого не сработало для меня, поскольку я использовал сетку, а не StackPanel.
Наконец я нашел этот пример: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/
и изменил его на это:
В разделе "Ресурсы":
<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>
В определении моей сетки:
<Grid Style="{StaticResource FocusTextBox}" />
Я немного опоздал на игру. Я попробовал решения, представленные здесь, но они не сработали. Если у кого-то еще есть проблемы с настройкой фокуса, вы можете попробовать это.
<TextBox behave:UserControlBehavior.FocusFirst='True'
Text="Hello World!" />
Другим возможным решением является использование FocusBehavior, предоставляемого бесплатной DevExpress MVVM Framework:
<TextBox Text="This control is focused on startup">
<dxmvvm:Interaction.Behaviors>
<dxmvvm:FocusBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
Он позволяет вам фокусировать элемент управления при его загрузке, при возникновении определенного события или изменении свойства.
Если вы не нашли решение по другим ответам, то, как я решил проблему.
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
TEXTBOX_OBJECT.Focus();
}), DispatcherPriority.Render);
Из того, что я понимаю, другие решения могут не работать, потому что вызов Focus()
вызывается до того, как приложение отобразит другие компоненты.