Ответ 1
Вы должны использовать FocusManager
bool b = FocusManager.GetFocusedElement() == textBox;
Есть ли способ узнать, сосредоточен ли элемент управления (в частности, System.Windows.Controls.TextBox) в Silverlight? Я ищу что-то вроде следующего (что вы увидите в обычном приложении .Net):
textBox.Focused
Это похоже на что-то простое и тривиальное, чтобы исключить из контроля, и все же я не могу найти ответ нигде.
Обновление
Несколько более элегантное решение, включающее ответ Rob, заключается в том, чтобы создать метод расширения следующим образом:
public static bool IsFocused( this Control control )
{
return FocusManager.GetFocusedElement() == control;
}
Вы должны использовать FocusManager
bool b = FocusManager.GetFocusedElement() == textBox;
Как только у вас есть элемент управления, состоящий из более чем одного входного элемента (который должен иметь фокус для обработки пользовательского ввода), спрашивая, что 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;
}