3

我想知道是否无论如何要从当前控件更改焦点并将其移动到 WPF 中 TabIndex 分配的控件上的其他控件。

示例我有 TabIndex 1 到 5 的控件,有没有办法将焦点从 1 跳到 5 ?

<TextBox TabIndex="1" Focusable = "true" LostFocus="test_LostFocus"/>
<TextBox TabIndex="2" Focusable = "true"/>
...
<TextBox TabIndex="5" Focusable = "true" name="LastControl"/>

.

private void test_LostFocus(object sender, RoutedEventArgs e)
{
  LastControl.Focus();
}

我试过 了Keyboard.Focus()FocusManager.SetFocusedElement()但没有运气。

任何的想法?

4

2 回答 2

2

如评论中所述,KeyDown是一种更好的方法(失去焦点会导致奇怪的行为,例如用户专门单击第二个控件,而焦点转到最后一个控件)...

确保你设置e.Handled为真虽然..!

这将起作用:

private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
        if (e.Key == Key.Tab)
        {
            e.Handled = true;
            LastControl.Focus();
        }
 }

文本框的减速应该是这样的:

<TextBox TabIndex="1" Focusable = "true" KeyDown="TextBox1_KeyDown"/>
于 2013-03-23T14:29:09.383 回答
1

只需处理KeyDown文本框的事件并在那里设置焦点。由于您正在使用Tab,请让控件知道您将通过设置来处理它e.Handled = true,这将停止tab使用 next 跳转到控件的默认操作TabIndex

private void tb_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Tab)
    {
        e.Handled = true;
        LastControl.Focus();
    }
}
于 2013-03-23T14:27:27.027 回答