IsKeyboardFocus с серебристым светом - PullRequest
1 голос
/ 29 сентября 2011

Как получить фокус клавиатуры в любом месте элемента или его дочерних элементов визуального дерева в Silverlght?

1 Ответ

3 голосов
/ 29 сентября 2011

Существует два возможных решения в зависимости от вашего сценария (мы обычно предпочитаем более подробные вопросы).

Сначала вы можете использовать статический метод FocusManager.GetFocusedElement(), чтобы получить элемент, который в данный момент имеет фокус.Затем вы можете использовать VisualTreeHelper, чтобы определить, находится ли элемент с вашим элементом.Я бы обычно использовал класс расширения, чтобы сделать использование VisualTreeHelper проще.Шахта найдена здесь .С этим классом присутствует.Затем: -

public static bool IsFocusIn(DependencyObject element)
{
      DependendyObject focusedElement = FocusManager.GetFocusedElement() as DependencyObject;
      if (focusedElement != null)
      {
           return focusedElement.Ancestors().Any(e => e == element);
      }
      return false;
}

Второй подход заключается в добавлении обработчиков событий к событиям GotFocus и LostFocus вашего элемента.Затем вы можете отслеживать каждый раз, когда фокус входит или оставляет какой-либо элемент управления в вашем элементе.

...