Установите фокус на текстовое поле в WPF

Как установить фокус на элементе TextBox в WPF

У меня есть этот код:

txtCompanyID.Focusable = true;
txtCompanyID.Focus();

... но он не работает.

Любая идея?

Ответ 1

В XAML:

<StackPanel FocusManager.FocusedElement="{Binding ElementName=Box}">
   <TextBox Name="Box" />
</StackPanel>

Ответ 3

Пока никто не объяснил, почему код в вопросе не работает. Я предполагаю, что код был помещен в конструктор окна. Но в это время слишком рано устанавливать фокус. Это нужно сделать, как только Окно будет готово к взаимодействию. Лучшим местом для кода является событие Loaded:

public KonsoleWindow() {
  public TestWindow() {
    InitializeComponent();
    Loaded += TestWindow_Loaded;
  }

  private void TestWindow_Loaded(object sender, RoutedEventArgs e) {
    txtCompanyID.Focus();
  }
}

Ответ 4

txtCompanyID.Focusable = true;
Keyboard.Focus(txtCompanyID);

MSDN:

Может быть только один элемент на весь рабочий стол с клавиатурой. В WPF элемент с клавиатурой фокус будет иметь набор IsKeyboardFocused к true.

Вы можете прорваться после строки настройки и проверить значение свойства IsKeyboardFocused. Также проверьте, действительно ли вы достигли этой строки, или, может быть, вы установите другой элемент, чтобы получить фокус после этого.

Ответ 5

Попробуйте следующее: MyTextBox.Focus ( );

Ответ 6

Ничего из этого не сработало для меня, поскольку я использовал сетку, а не 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}" />

Ответ 7

Я немного опоздал на игру. Я попробовал решения, представленные здесь, но они не сработали. Если у кого-то еще есть проблемы с настройкой фокуса, вы можете попробовать это.

<TextBox behave:UserControlBehavior.FocusFirst='True'
Text="Hello World!" />

Ответ 8

Другим возможным решением является использование FocusBehavior, предоставляемого бесплатной DevExpress MVVM Framework:

<TextBox Text="This control is focused on startup">
    <dxmvvm:Interaction.Behaviors>
        <dxmvvm:FocusBehavior/>
    </dxmvvm:Interaction.Behaviors>
</TextBox>

Он позволяет вам фокусировать элемент управления при его загрузке, при возникновении определенного события или изменении свойства.

Ответ 9

Если вы не нашли решение по другим ответам, то, как я решил проблему.

Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
  TEXTBOX_OBJECT.Focus();
}), DispatcherPriority.Render);

Из того, что я понимаю, другие решения могут не работать, потому что вызов Focus() вызывается до того, как приложение отобразит другие компоненты.