将控件聚焦在DataGrid旁边

时间:2014-07-05 11:56:03

标签: c# wpf datagrid focus

假设我在WPF窗口上有6个控件,如下所示:

TabIndex   |   Name of the Control
-----------+----------------------
   0       |       DataGrid
   1       |       Button
   2       |       ComboBox
   3       |       Button
   4       |       Button
   5       |       Button

当Datagrid具有焦点并且如果我按 F5 或其他我希望的其他键时,我希望焦点按下tabIndex = 1的按钮。

我可以用Name_Of_The_Button.Focus();等简单的术语来表达。

上面我举了一个例子。实际上我并不知道tabIndex为DataGrid' s_abIndex + 1的控件。所以,我不能使用上面的代码行。

还有其他方法可以解决我的问题吗?

1 个答案:

答案 0 :(得分:1)

如果他们是窗口的逻辑孩子,你可以通过以下方式实现:

  1. 在控件容器上挂钩PreviewKeyDown方法(比如StackPanel)。
  2. 检查是否按下了F5键。
  3. 使用LogicalTreeHelper循环播放Windows的子项。
  4. 使用KeyboardNavigation.GetTabIndex(child)方法检查子项的tabIndex。
  5. 如果真实设定专注于孩子。

  6. <强>代码

    private void StackPanel_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.F5)
        {
            // Replace stackPanel with the name of your panel.
            foreach (UIElement child in LogicalTreeHelper.GetChildren(stackPanel))
            {
                if (KeyboardNavigation.GetTabIndex(child) == 2)
                {
                    child.Focus();
                    break;
                }
            }
        }
    }