在Silverlight应用程序中检测键盘焦点丢失
我有一个由键盘控制的Silverlight游戏,我希望它在失去键盘焦点时进入暂停状态(例如,用户单击托管网页的另一部分,或移动到另一个浏览器选项卡) 我曾经在Silverlight 1.1中通过订阅我的RootVisual UserControl上的LostFocus事件来实现这一点,但在Silverlight的最后两个版本中,我发现在单击应用程序中的按钮后不久,此事件似乎意外触发(在Silverlight 2中触发一次,在Silverlight 3中触发两次!)在Silverlight应用程序中检测键盘焦点丢失,silverlight,focus,Silverlight,Focus,我有一个由键盘控制的Silverlight游戏,我希望它在失去键盘焦点时进入暂停状态(例如,用户单击托管网页的另一部分,或移动到另一个浏览器选项卡) 我曾经在Silverlight 1.1中通过订阅我的RootVisual UserControl上的LostFocus事件来实现这一点,但在Silverlight的最后两个版本中,我发现在单击应用程序中的按钮后不久,此事件似乎意外触发(在Silverlight 2中触发一次,在Silverlight 3中触发两次!) 在托管页面或Silverlig
在托管页面或Silverlight中是否有更可靠的javascript方法来检测焦点丢失?我终于找到了解决此问题的方法。LostFocus事件的RouteDevenTargets属性具有OriginalSource属性,该属性允许我忽略来自RootVisual子级的任何LostFocus事件
void Page_LostFocus(object sender, RoutedEventArgs e)
{
if (e.OriginalSource == this)
{
Pause();
}
}
你确定这样行吗?根据我的经验,当一个孩子有焦点并且焦点转移到父母和孩子之外时,你永远不会得到OriginalSource==parent的LostFocus。我懒得听失焦。我在GotFocus中做每件事。我想可能有一些场景不可靠,但对于我的游戏来说,它工作得很好。这是Silverlight的一个很好的更新,您可以在应用程序级别订阅一个全局事件。