在 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:在布局中查找所有类型的控件

Silverlight 中的十进制转换器无法正确处理丢失焦点

如何在windows中检测控件是不是是输入控件并覆盖输入

在 Silverlight 3 中截取当前用户控件或任何 GUI 的屏幕截图

WCF 轮询双工绑定和非 Silverlight 客户端