2009-12-23 36 views
16

是否有任何方法可以判断控件(特别是System.Windows.Controls.TextBox)是否专注于Silverlight?我正在寻找类似如下(你会在一个普通的.NET应用程序见):在Silverlight中检测控件的焦点

textBox.Focused 

这似乎是一些简单和琐碎从控制离开了,但我无法找到任何地方的答案。

更新

稍微更优雅的解决方案,结合罗布的回答,是创建一个扩展方法,像这样:

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

回答

27

你必须使用FocusManager

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

谢谢。我想知道为什么微软决定以这种方式处理它,而不是在其他任何地方(甚至他们自己的产品)处理它的方式...... – Dov 2009-12-23 16:46:15

+0

也许它有助于保持安装程序更小? – 2009-12-23 16:49:56

0

由于只要您有一个由多个输入元素组成的控件(它需要具有处理用户输入的焦点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; 
} 
相关问题