将焦点设置在WPF中的文本框中

时间:2009-08-28 06:44:38

标签: c# .net wpf textbox focus

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

我有这段代码:

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

......但它没有用。

有什么想法吗?

9 个答案:

答案 0 :(得分:128)

在XAML中:

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

答案 1 :(得分:49)

尝试FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, txtCompanyID)

答案 2 :(得分:45)

到目前为止,没有人解释为什么问题中的代码不起作用。我的猜测是代码放在Window的构造函数中。但此时设定焦点还为时过早。一旦Window准备好进行交互,就必须完成它。代码的最佳位置是Loaded事件:

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

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

答案 3 :(得分:22)

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

MSDN:

  

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

您可以在设置行后中断并检查IsKeyboardFocused属性的值。还要检查你是否真的到达那一行,或者你可以设置一些其他元素来获得焦点。

答案 4 :(得分:16)

试试这个:MyTextBox.Focus ( );

答案 5 :(得分:10)

这对我来说都不起作用,因为我使用的是网格而不是StackPanel。

我终于找到了这个例子: http://spin.atomicobject.com/2013/03/06/xaml-wpf-textbox-focus/

并将其修改为:

在&#39;资源&#39;部分:

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

答案 6 :(得分:0)

另一种可能的解决方案是使用FocusBehavior提供的free DevExpress MVVM Framework

name

它允许您在控件加载时,引发特定事件或更改属性时集中控制。

答案 7 :(得分:0)

如果您还没有找到其他答案的解决方案,那就是我解决问题的方式。

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

据我了解,其他解决方案可能无法正常工作,因为对Focus()的调用是在应用程序呈现其他组件之前调用的。

答案 8 :(得分:0)

在后面的代码中,您只能通过执行此操作来实现它。

 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            txtIndex.Focusable = true;
            txtIndex.Focus();
        }

注意:加载窗口之前将无法工作