Существует два возможных решения в зависимости от вашего сценария (мы обычно предпочитаем более подробные вопросы).
Сначала вы можете использовать статический метод 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
вашего элемента.Затем вы можете отслеживать каждый раз, когда фокус входит или оставляет какой-либо элемент управления в вашем элементе.