键盘焦点到数据网格

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

8

好的,我找到了一种解决方案。这对我有效。

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

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


1
无法工作:加载时没有选定的单元格。 - wondra

1

尝试使用Keyboard.Focus手动进行键盘焦点控制-

Keyboard.Focus(dataGrid);

0
一种清晰的方法是:
DataGridCell dgc = DataGridView.FindChildren<DataGridCell>(true).First();
Keyboard.Focus(dgc);

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

我花了很多时间才找到这种方法,希望它有所帮助。

英语不是我的母语,请原谅任何错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接