将焦点设置在WPF文本框(Set focus on textbox in WPF)

2019-06-21 05:57发布

如何设置焦点的上TextBox在WPF元素

我有这样的代码:

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

...但它不工作。

任何的想法?

Answer 1:

在XAML:

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


Answer 2:

尝试FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, txtCompanyID)


Answer 3:

没人至今为什么在问题的代码不工作解释。 我的猜测是,该代码被放置在窗口的构造函数。 但就在这个时候还为时过早设置焦点。 它必须做一次窗口准备的互动。 对于代码的最好的地方是Loaded事件:

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

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


Answer 4:

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

MSDN:

只能有一个具有键盘焦点整个桌面上的元素。 在WPF中,具有键盘焦点的元素将有IsKeyboardFocused设置为true。

设置行之后,您可能会破坏并检查的值IsKeyboardFocused属性。 另外,请检查您是否真的达到这个线或者你设置一些其他的元素之后得到的焦点。



Answer 5:

试试这个: MyTextBox.Focus ( );



Answer 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}" />


Answer 7:

另一种可能的解决方案是使用FocusBehavior提供免费的DevExpress MVVM框架 :

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

它允许在它的加载,在引发某个事件或属性更改您集中控制。



文章来源: Set focus on textbox in WPF