wpf - 确定谁在 WPF 窗口中有焦点

标签 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();

我是否正在解决所有问题,是否有其他方法可以选择数据网格中的第一行并将焦点设置为它?通常,创建数据网格时,在用户鼠标单击所需行之前不会选择任何行。

任何想法将不胜感激。

谢谢!

最佳答案

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

如果您使用 WPF Toolkit 中的 DataGrid,请准备好查找与焦点处理相关的一些错误。部分已解决 recently .

关于wpf - 确定谁在 WPF 窗口中有焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2409684/

相关文章:

WPF DataGrid 禁用一行但允许一个单元格

c# - WPF 列表框 : Change border per item according boolean value

c# - WPF Datagrid 根据值触发行颜色

wpf - 如何使用 WPF 和 MVVM 将数据库中的数据加载到 DataGrid?

c# - 如何在代码中将 DataGrid 的数字列向右对齐?

c# - 使用模板 WPF 为 DataGrid 动态生成行和列标题

c# - 应用程序不会在全局捕获的 UnhandledExceptions 上恢复

c# - 从collectionview获取过滤列表

WPF TextBox lostfocus 作为附加属性