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


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

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

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

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

есть идеи?

6 78

6 ответов:

в XAML:

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

попробовать FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, txtCompanyID)

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

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 набор к истине.

вы можете сломать после строки настройки и проверить значение 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}" />