在WPF中以编程方式向后选项卡

时间:2014-09-17 16:18:58

标签: c# wpf navigation wpfdatagrid keyboard-events

我有一个相当简单的WPF应用程序 - 顶部是一系列文本和组合框(全部都设置了TabIndex),所有这些都是数据网格。用户可以在顶部的所有框中切换,然后应用程序进入数据网格,其中tabbing在一行中移动单元格。

按键盘上的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如何布局有关?

1 个答案:

答案 0 :(得分:0)

事实证明我没有Focusable设置为False按钮标签向后(但是按钮向前设置)。我的错误。