如何在WPF中移动焦点

本文关键字:移动 焦点 WPF | 更新日期: 2023-09-27 18:05:40

我想知道是否有办法从当前控件更改焦点,并将其移动到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(),但没有运气。

任何想法?

如何在WPF中移动焦点

正如评论中所说,KeyDown是一个更好的方法(失去焦点会导致奇怪的行为,如用户特别点击第二个控件,焦点转到最后一个控件)…

确保您将e.Handled设置为true…!

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

只需处理文本框的KeyDown事件并在那里设置焦点。因为你使用的是Tab,让控件知道你将通过设置e.Handled = true来处理它,这将停止默认的tab动作,用下一个TabIndex跳转到控件。

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

可能的WPF答案,非程序性的:

Ctrl+Tab/Ctrl+Shift+Tab

可能的WPF答案,程序化的:

System.Windows.Forms.SendKeys.SendWait("^{TAB}");/

System.Windows.Forms.SendKeys.SendWait("^+{TAB}");

https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.sendkeys.send

https://stackoverflow.com/a/15621425/10789707