7

我们正在使用 WPF 并有一个从 DockingLibrary 派生的窗口。此窗口有一个网格,其中包含多个项目,其中一个是 WPF 数据网格。我们正在使用 MV-VM 模式。创建并显示此窗口时,不会选择此数据网格中的任何行。我们可以通过执行以下操作将行设置为突出显示:

  SharedWindow.ShipmentWin.shipmentDataGrid.SelectedIndex = 0;

这会导致数据网格中的第一行显示为突出显示。但是,并非总是存在其中之一,这一行不是选定的,也没有焦点。我尝试将 IsSelected 和 Focus 设置在这一行上,如下所示:

  SharedWindow.ShipmentWin.ShipVM.IsSelected = true;
  bool focused = SharedWindow.ShipmentWin.shipmentDataGrid.Focus();

我是否要解决这一切都错了,还有其他方法可以选择数据网格中的第一行并将焦点设置在它上面吗?通常,当创建数据网格时,在用户鼠标单击所需行之前不会选择任何行。

任何想法将不胜感激。

谢谢!

4

2 回答 2

10

看看FocusManager它允许您通过SetFocusedElement方法将焦点设置到另一个 UI 元素。此外,它允许您确定应用程序中当前聚焦的元素,这可以方便地调试焦点问题。Snoop也很有用。它在底部状态栏中显示当前聚焦的元素。

如果您使用 WPF 工具包中的 DataGrid,请准备好查找与焦点处理相关的一些错误。最近已经解决了一些问题。

于 2010-03-09T16:23:33.740 回答
1

还值得了解逻辑焦点键盘焦点之间的区别,它们是完全不同的动物。该.Focus()方法有时只设置逻辑焦点——这可能不是你想要的。

该方法的文档告诉您,如果设置了键盘焦点Focus,它将返回,否则。truefalse

于 2010-03-09T18:04:56.777 回答