Обнаружение фокуса элемента управления в Silverlight - PullRequest
16 голосов
/ 23 декабря 2009

Есть ли способ определить, ориентирован ли элемент управления (в частности, System.Windows.Controls.TextBox) в Silverlight? Я ищу что-то вроде следующего (что вы увидите в обычном приложении .Net):

textBox.Focused

Это кажется чем-то простым и тривиальным, чтобы упустить из-под контроля, и все же я нигде не могу найти ответ.

Обновление

Несколько более элегантное решение, включающее ответ Роба, заключается в создании метода расширения, например, так:

public static bool IsFocused( this Control control )
{
    return FocusManager.GetFocusedElement() == control;
}

Ответы [ 2 ]

27 голосов
/ 23 декабря 2009

Вы должны использовать FocusManager

bool b = FocusManager.GetFocusedElement() == textBox;
0 голосов
/ 08 ноября 2013

Как только у вас есть элемент управления, состоящий из более чем одного элемента ввода (который должен иметь фокус для обработки пользовательского ввода), запрос FocusManager больше не сработает. Попробуйте это:

private bool HasFocus { get; set; }

protected override void OnGotFocus( RoutedEventArgs e )
{
    base.OnGotFocus( e );
    HasFocus = true;
}

protected override void OnLostFocus( RoutedEventArgs e )
{
    base.OnLostFocus( e );
    HasFocus = false;
}
...