如何在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()
,但没有运气。
任何想法?
正如评论中所说,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}");