将焦点设置在 UserControl 中的 TextBox 上

问题描述 投票:0回答:4

在我的程序中,我有一个用户控件,它使用内容演示器在窗口上显示数据。我想简单地将光标焦点设置在启动时窗口中的某个

textBox
上。

通常我会通过窗口的代码隐藏来完成此操作,如下所示:

textBox.Focus();

但是,

textBox
是在用户控件中定义的,并且似乎不以相同的方式工作。到目前为止,我已经在用户控件的代码隐藏中尝试了与上面相同的方法。

为什么这不起作用?如果在用户控件中定义了

textBox
,如何设置焦点?

我已经尝试过......:

用户控制:

public UserControl()
{
    InitializeComponent();

    FocusManager.SetFocusedElement(this, textBox);
}

用户控制:

public UserControl()
{
    InitializeComponent();

    textBox.Focusable = true;
    Keyboard.Focus(textBox);
}
c# wpf user-controls textbox
4个回答
5
投票

尝试一下:

FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, textBox)

或来自msdn网站:

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

注意:您无法在构造函数中设置焦点。如果是,则此时尚未创建 UI 元素。您应该在控件的 Loaded 事件期间设置焦点。


3
投票

有点晚了,但它真正对我有用的是

public UserControl()
    {
        InitializeComponent();

        Dispatcher.BeginInvoke(new System.Action(() => { Keyboard.Focus(TextBox); }),
                               System.Windows.Threading.DispatcherPriority.Loaded);
    }

2
投票

您可以尝试在

Loaded
Initialized
User control
事件中设置焦点。例如:

private void MyWpfControl_Load(object sender, EventArgs e)
{
    textBox.Focusable = true;
    Keyboard.Focus(textBox);
}

信息:加载事件初始化事件


0
投票

如果将控件集中在构造函数或事件(如 Loaded)中,则相同类型的每个用户控件在同一窗口中初始化时都会获得焦点。最后一个赢得了焦点。 改为这样做;

  1. 在用户控件中使用 new 关键字定义 Focus 方法:

    public new void Focus() => textBox.Focus();

  2. 从 Windows 的代码隐藏文件中调用您想要激活的内容

    userControl.Focus();

© www.soinside.com 2019 - 2024. All rights reserved.