5

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

通常我会通过窗口的代码隐藏来执行此操作,如下所示:textBox.Focus();

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

为什么这不起作用?textBox如果在用户控件中定义了焦点,如何设置焦点?

我尝试过的......:

用户控制:

public UserControl()
{
    InitializeComponent();

    FocusManager.SetFocusedElement(this, textBox);
}

用户控制:

public UserControl()
{
    InitializeComponent();

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

3 回答 3

5

试试这个:FocusManager.SetFocusedElement

FocusManager.SetFocusedElement(parentElement, textBox)

或从 msdn 网站:

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

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

于 2013-10-17T18:11:12.343 回答
3

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

public UserControl()
    {
        InitializeComponent();

        Dispatcher.BeginInvoke(new System.Action(() => { Keyboard.Focus(TextBox); }),
                               System.Windows.Threading.DispatcherPriority.Loaded);
    }
于 2016-12-27T07:53:34.980 回答
2

Loaded您可以尝试在 的orInitialized事件中设置焦点User control。例如:

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

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

于 2013-10-17T18:41:07.563 回答