【问题标题】:Keyboard focus to DataGrid键盘焦点到 DataGrid
【发布时间】:2013-12-12 07:04:32
【问题描述】:

我有一个 WPF DataGrid 并希望将焦点设置到第一个项目,以便用户可以在第一次打开对话框时使用键盘在项目列表中导航。用datagrid.Focus();我可以将焦点设置到 DataGrid,但这显然不是键盘焦点,因为当我按下箭头键时,我无法在 DataGrid 中导航。焦点跳转到文本框“描述”,但这不是我想要的(见图)。

如何以正确的方式将焦点和键盘焦点设置到 DataGrid?感谢您的帮助。

【问题讨论】:

    标签: c# wpf datagrid keyboard focus


    【解决方案1】:

    好的,我找到了解决方案。这对我有用

    Keyboard.Focus (GetDataGridCell (dataGridFiles.SelectedCells[0]));
    
    private System.Windows.Controls.DataGridCell GetDataGridCell (System.Windows.Controls.DataGridCellInfo cellInfo)
    {
      var cellContent = cellInfo.Column.GetCellContent (cellInfo.Item);
    
      if (cellContent != null)
        return ((System.Windows.Controls.DataGridCell) cellContent.Parent);
    
      return (null);
    }
    

    现在,我获得了正确的焦点,可以使用键盘进行导航。

    【讨论】:

    • 不起作用:加载中没有选定的单元格。
    【解决方案2】:

    尝试使用Keyboard.Focus 手动赋予键盘焦点 -

    Keyboard.Focus(dataGrid);
    

    【讨论】:

      【解决方案3】:

      一个明确的方法:

      DataGridCell dgc = DataGridView.FindChildren<DataGridCell>(true).First();
      Keyboard.Focus(dgc);
      

      解释:方法 FindChildren 会得到一个 IEnumarable,在这种情况下上面的 T 是 DataGridCell。选项“true”用于强制在 Visual Tree 视图中搜索,“.First()”来自 LINQ,以获取 IEnumerable 的第一个结果。因此,您将拥有 datagrid 的第一个 DataGridCell,现在您可以设置焦点。

      我浪费了很多时间来寻找这种方式,希望对您有所帮助。

      英语不是我的母语,如有错误请见谅。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多