在 Silverlight 中检测控件的焦点
Posted
技术标签:
【中文标题】在 Silverlight 中检测控件的焦点【英文标题】:Detecting a control's focus in Silverlight 【发布时间】:2010-12-29 13:08:19 【问题描述】:有什么方法可以判断一个控件(特别是 System.Windows.Controls.TextBox)是否集中在 Silverlight 中?我正在寻找类似以下的内容(您会在常规 .Net 应用程序中看到):
textBox.Focused
从控件中省略这似乎是一件简单而琐碎的事情,但我在任何地方都找不到答案。
更新
结合 Rob 的答案,一个稍微更优雅的解决方案是创建一个扩展方法,如下所示:
public static bool IsFocused( this Control control )
return FocusManager.GetFocusedElement() == control;
【问题讨论】:
【参考方案1】:你必须使用FocusManager
bool b = FocusManager.GetFocusedElement() == textBox;
【讨论】:
谢谢。我想知道为什么微软决定以这种方式处理它,而不是其他地方(甚至是他们自己的产品)的处理方式...... 也许它有助于使安装程序更小?【参考方案2】:一旦你有一个包含多个输入元素(需要有焦点来处理用户输入)的控件,那么询问 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;
【讨论】:
以上是关于在 Silverlight 中检测控件的焦点的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight 中的十进制转换器无法正确处理丢失焦点