关注数据网格旁边的控件

本文关键字:控件 网格 数据 数据网 | 更新日期: 2023-09-27 18:11:45

假设我在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的_tabindex + 1。因此,我不能使用上面的代码行。

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

关注数据网格旁边的控件

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

  1. 钩子PreviewKeyDown方法的容器控件(说StackPanel)。
  2. 检查是否按了F5键
  3. 使用LogicalTreeHelper循环遍历窗口的子窗口。
  4. KeyboardNavigation.GetTabIndex(child)法检查儿童tabIndex

:

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;
            }
        }
    }
}