AFAIK Нет прямого метода или свойства, чтобы проверить, имеет ли он фокус, но вы должны иметь возможность использовать FocusManager.GetFocusedElement ().
Если вы затем определите метод расширения, вы сможете вызвать MyDataGrid.HasFocus ():
public static class ControlExtensions
{
public static bool HasFocus(this Control aControl)
{
return System.Windows.Input.FocusManager.GetFocusedElement() == aControl;
}
}
[отредактировано: я проверил это сейчас:]
Однако есть одна загвоздка: вызов GetFocusedElement () может вернуть текущую фокусированную ячейку в DataGrid. Так что в этом случае HasFocus вернет false.
Чтобы иметь возможность проверить, сфокусирован ли DataGrid или одна из его ячеек, мы можем адаптировать наш метод расширения следующим образом:
public static class ControlExtensions
{
public static bool HasFocus(this Control aControl, bool aCheckChildren)
{
var oFocused = System.Windows.Input.FocusManager.GetFocusedElement() as DependencyObject;
if (!aCheckChildren)
return oFocused == aControl;
while (oFocused != null)
{
if (oFocused == aControl)
return true;
oFocused = System.Windows.Media.VisualTreeHelper.GetParent(oFocused);
}
return false;
}
}
Надеюсь, это немного поможет?