2009-12-23 2 views
16

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

textBox.Focused 

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

Update

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

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

ответ

27

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

bool b = FocusManager.GetFocusedElement() == textBox; 
+1

Спасибо. Интересно, почему Microsoft решила справиться с этим так, а не с тем, как его обрабатывают повсюду (даже свои собственные продукты) ... – Dov

+0

Возможно, это помогает удержать установщика меньше? –

0

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