确定谁在WPF窗口中有焦点

时间:2010-03-09 14:27:42

标签: wpf wpfdatagrid

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

  SharedWindow.ShipmentWin.shipmentDataGrid.SelectedIndex = 0;

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

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

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

任何想法都会非常感激。

谢谢!

2 个答案:

答案 0 :(得分:9)

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

如果您使用WPF Toolkit中的DataGrid,请准备好找到与焦点处理相关的一些错误。有些问题得到解决recently

答案 1 :(得分:0)

同样值得理解逻辑焦点键盘焦点之间的区别,这是完全不同的动物。 .Focus()方法有时只会设置逻辑焦点 - 这可能不是您想要的。

Focus方法的documentation告诉您,如果设置了键盘焦点,它将返回true,否则会返回false