WPF:如何将焦点设置在数据网格上的特定行?

9

我希望将焦点设置在数据表格的第一行。

目前我的实现如下:

Keyboard.Focus(ResultsGrid)
If result.Count > 0 Then
    ResultsGrid.SelectedIndex = 0
End If

这将使焦点集中在数据网格上,但不是行本身。
2个回答

23

选择行后,您需要以以下方式将焦点设置在行上:

ResultsGrid.SelectedIndex = index;
DataGridRow row = (DataGridRow)ResultsGrid.ItemContainerGenerator.ContainerFromIndex(index);
row.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));

谢谢,这对我很有帮助! - Sam
1
我的程序被中断了,因为变量“row”为空。有什么想法吗?谢谢。 - Allan Ruin
请记住索引是从0开始的(0表示第一行)。您可以添加一个检查以避免异常,代码如下:if(row != null)。 - Guido Zanon
@AllanRuin 看看这个问题的答案: 链接 - Tempest.Me

1

试试这个:

yourDataGrid.SelectedItem = yourDataGrid.Items[i];

它在抱怨行为空。 - Jonathan Allen
ItemContainerGenerator.Status为NotStarted。有没有办法手动启动它? - Jonathan Allen
更新了我的回答。比我想象的要容易。 - Taylor Leese
那也有和我使用 SelectedIndex = 0 相同的问题。 - Jonathan Allen
1
在我的应用程序中,它将焦点放在了行而不仅仅是数据网格上。 - Taylor Leese
dataGrid.Focus(); 也适用于在数据网格中进行焦点设置,但如果箭头键不起作用,那么如果我们想要将焦点集中在行上,因为这样我们的箭头键就会起作用,有什么解决方案吗? - Ahmad

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