我们正在使用WPF,并且有一个从DockingLibrary派生的窗口。该窗口有一个网格,里面有多个项目,一个是WPF数据网格。我们正在使用M-V-VM模式。创建并显示此窗口时,不会选择此数据网格中的任何行。我们可以通过执行以下操作将行显示为突出显示:
SharedWindow.ShipmentWin.shipmentDataGrid.SelectedIndex = 0;
这会导致数据网格中的第一行显示为突出显示。但是,并没有总是其中之一,这一行不是选中,也没有焦点。我尝试将IsSelected和Focus设置在此行中,如下所示:
SharedWindow.ShipmentWin.ShipVM.IsSelected = true;
bool focused = SharedWindow.ShipmentWin.shipmentDataGrid.Focus();
我是否认为这一切都错了,是否有其他方法选择数据网格中的第一行并将焦点设置为它?通常,在创建数据网格时,在用户鼠标单击所需行之前,不会选择任何行。
任何想法都会非常感激。
谢谢!
答案 0 :(得分:9)
查看FocusManager。它允许您通过 SetFocusedElement 方法将焦点设置为另一个UI元素。此外,它允许您确定应用程序中当前关注的元素,这可以方便调试焦点问题。 Snoop也很有用。它在底部状态栏中显示当前聚焦的元素。
如果您使用WPF Toolkit中的DataGrid,请准备好找到与焦点处理相关的一些错误。有些问题得到解决recently。
答案 1 :(得分:0)
同样值得理解逻辑焦点和键盘焦点之间的区别,这是完全不同的动物。 .Focus()
方法有时只会设置逻辑焦点 - 这可能不是您想要的。
Focus
方法的documentation告诉您,如果设置了键盘焦点,它将返回true
,否则会返回false
。