为什么FocusManager.GetFocusedElement(this)总是返回null?

时间:2011-03-23 15:08:21

标签: wpf focus xbap

我有一个应用程序运行良好,作为一个简单的WPF应用程序在主窗口级别的GotFocus上有一个事件处理程序,如下所示:

    private void MainWindowGotFocus(object sender, RoutedEventArgs e)
    {
        var element = FocusManager.GetFocusedElement(this) as FrameworkElement;
        if (element != null)
        {
               //...

然而,当设置为XBAP应用程序时,这种行为很奇怪(几乎完全相同的代码 - 主要的可视元素是Page而不是Window,但事件仍然可用并被触发)。

在这种情况下(XBAP / wpf浏览器应用程序)元素始终为null。

有什么想法吗? :(

2 个答案:

答案 0 :(得分:6)

非常感谢我的同事(Bogdan R.),我们发现FocusManager.IsFocusScope对Window(WPF)和Page(XBAP)有不同的默认值,即后者是假的。

只需在Page元素上设置FocusManager.IsFocusScope即可解决问题。

答案 1 :(得分:3)

也可以尝试使用Keyboard.FocusedElement代替