在 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 中检测控件的焦点的主要内容,如果未能解决你的问题,请参考以下文章