如何在DataGridCell中获得可聚焦控件

本文关键字:聚焦 控件 DataGridCell | 更新日期: 2023-09-27 18:00:59

我有一个DataGrid,我正在订阅PreparingCellForEdit。上面有一个代码,通过从键盘焦点获取元素来返回DataGridCell

var cell = Keyboard.FocusedElement as DataGridCell;

当我有一个单元格时,我需要找出里面是否有一个可聚焦的元素,它是启用的、可见的和可编辑的。

示例:

 FieldX  |      FieldY
--------------------------
   [ ]+  |       [ ]+
   [ ]*  |  (not visible)
+ Enabled, visible, focusable
* IsEnabled = false

我如何才能发现细胞内是否存在这样的元素?

如何在DataGridCell中获得可聚焦控件

使用VisualTreeHelper遍历子元素,然后检查这些元素是否满足您的要求。类似这样的东西:

var elementList = new List<DependencyObject>();
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++)
{
    var element = VisualTreeHelper.GetChild(dependencyObject, i);
    if ((Visibility)element.GetValue(FrameworkElement.VisibilityProperty) == Visibility.Visible)
        elementList.Add(element);
}