Есть ли способ проверить, есть ли у DataGrid в Silverlight Focus? - PullRequest
0 голосов
/ 26 февраля 2009

У меня есть Silverlight DataGrid, который мне нужно проверить, есть ли у него Focus. Я знаю, что есть метод для установки Фокуса и события для GotFocus, но я не вижу ничего для проверки, имеет ли он фокус.

Есть идеи?

1 Ответ

3 голосов
/ 26 февраля 2009

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;
    }
}

Надеюсь, это немного поможет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...