我有一个WPF DataGrid,希望将焦点设置为第一项,以使用户可以使用键盘在项目列表中导航。当对话框第一次打开时,可以使用datagrid.Focus(); 将焦点设置到DataGrid,但这显然不是键盘焦点,因为当按下向下箭头键时,无法在DataGrid中导航。焦点跳转到文本框“描述”,但这不是我想要的(见图片)。如何正确设置焦点和键盘焦点到DataGrid?谢谢你的帮助。
好的,我找到了一种解决方案。这对我有效。
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);
}
现在,我已经获得了正确的焦点,并可以使用键盘导航。
DataGridCell dgc = DataGridView.FindChildren<DataGridCell>(true).First();
Keyboard.Focus(dgc);
解释:FindChildren 方法将获取一个 IEnumarable,在这种情况下,T 上面是 DataGridCell。选项“true”用于强制在 Visual Tree 视图中搜索,“.First()”来自 LINQ,以获取 IEnumerable 的第一个结果。因此,您将拥有 datagrid 的第一个 DataGridCell,现在可以设置焦点。
我花了很多时间才找到这种方法,希望它有所帮助。
英语不是我的母语,请原谅任何错误。