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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将焦点设置在WPF中的文本框中相关的知识,希望对你有一定的参考价值。

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

我有这个代码:

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

......但它不起作用。

任何的想法?

答案

在XAML中:

<StackPanel FocusManager.FocusedElement="Binding ElementName=Box">
   <TextBox Name="Box" />
</StackPanel>
另一答案

试试FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, txtCompanyID)
另一答案

到目前为止,没有人解释为什么问题中的代码不起作用。我的猜测是代码放在Window的构造函数中。但此时设定焦点还为时过早。一旦Window准备好进行交互,就必须完成它。代码的最佳位置是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" />
另一答案

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

Application.Current.Dispatcher.BeginInvoke(new Action(() =>

  TEXTBOX_OBJECT.Focus();
), DispatcherPriority.Render);

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

另一答案

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

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

它允许您在控件加载时,在引发某个事件或更改属性时聚焦控件。

以上是关于将焦点设置在WPF中的文本框中的主要内容,如果未能解决你的问题,请参考以下文章

wpf 焦点定位到 文本框开头? 2:如何按Tab,让焦点不进入第3个文本框,意思是在前两个文本框中切换

将焦点设置在 xaml wpf 中的文本框上

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

将焦点设置到转发器中的文本框

javascript 在文本框中的最后一个字符后设置光标/焦点

将插入符号/光标位置设置为字符串值 WPF 文本框的末尾