2009-12-23 15 views
16

¿Hay alguna forma de saber si un control (específicamente un System.Windows.Controls.TextBox) está enfocado en Silverlight? Busco algo como lo siguiente (lo que se vería en una aplicación regular .Net):Detectando el foco de un control en Silverlight

textBox.Focused 

Esto parece algo simple y trivial dejar fuera de un control, y sin embargo no puedo encontrar una respuesta en cualquier lugar.

actualización

Una solución un poco más elegante, la incorporación de la respuesta de Rob, es la creación de un método de extensión de este modo:

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

Respuesta

27

Usted tiene que usar FocusManager

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

Thanks. Me pregunto por qué Microsoft decidió manejarlo de esta manera en lugar de la forma en que se maneja en cualquier otro lugar (incluso sus propios productos) ... – Dov

+0

¿Tal vez ayuda a mantener el instalador más pequeño? –

0

Como tan pronto como tenga un control que conste de más de un elemento de entrada (que debe tener foco para manejar la entrada del usuario) t) preguntarle a FocusManager que ya no hará más el truco. Pruebe esto:

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; 
} 
Cuestiones relacionadas