在WPF中以程序方式向后制表
本文关键字:方式 程序 WPF | 更新日期: 2023-09-27 18:22:10
我有一个相当简单的WPF应用程序——顶部是一系列文本和组合框(都设置了TabIndex
),下面是一个数据网格。用户可以在顶部的所有框中进行制表,然后应用程序向下进入数据网格,在数据网格中制表可以在一行中的单元格中移动。
按键盘上的Shift+Tab键在任何地方都可以正常工作但是我正在尝试添加按钮,允许用户在不使用键盘的情况下来回切换(这将是一个触摸屏应用程序)。
在一个按钮我有。。。
private void ButtonRight_Click(object sender, System.Windows.RoutedEventArgs e)
{
(Keyboard.FocusedElement as UIElement).MoveFocus( new TraversalRequest(FocusNavigationDirection.Next));
}
哪一个非常适合向前切换,所以你会认为使用FocusNavigationDirection.Previous
会起到相反的作用?但它将焦点设置为数据网格中的最后一个单元格,无论按下按钮时焦点是什么!我试过在各种家长和主窗口上调用MoveFocus
,但这些都不起作用。
我试过的另一件事是。。。
System.Windows.Forms.SendKeys.SendWait("+{TAB}");
要尝试手动发送Shift+Tab事件。。。它将焦点设置为零!(注意,SendKeys.Send
在WPF中不起作用;必须使用SendWait
)
我也试过。。。
var shift = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.LeftShift) { RoutedEvent = Keyboard.KeyDownEvent };
var tab = new KeyEventArgs(Keyboard.PrimaryDevice, Keyboard.PrimaryDevice.ActiveSource, 0, Key.Tab) { RoutedEvent = Keyboard.KeyDownEvent };
InputManager.Current.ProcessInput(shift);
InputManager.Current.ProcessInput(tab);
它将焦点设置为应用程序顶部的第一个文本框!
我不知道从这里到哪里去。理想情况下,TraversalRequest(FocusNavigationDirection.Previous)
可以正常工作,但事实并非如此。也许这与XAML的布局有关?
原来我在向后切换的按钮上没有将Focusable
设置为False
(但它是在向前切换的按钮中设置的)。我的错误。