如何检测我的应用程序何时在Windows 8.1的拆分视图中获得焦点?

时间:2013-12-11 09:25:03

标签: windows-8 windows-runtime windows-store-apps windows-8.1

我的win8.1商店应用会将用户导航到网络浏览器。用户可以与浏览器进行交互,但是当他们返回我的应用程序时,我需要它来检测它,以便它可以刷新其内容(并考虑在服务器上进行的任何更改)。

如果浏览器以全屏模式启动,这很容易,但是当它被拆分时,我需要检测用户何时点按我的应用程序窗口。 (似乎默认情况下它是作为拆分启动的,这实际上是首选体验)。

-------------------------------
|             |               |
|             |               |
|    my app   |    browser    |
|             |               |
|             |               |
-------------------------------

问题 - 我可以使用什么事件来检测用户点击何时将焦点从浏览器更改为我的应用?

我为页面尝试了GotFocus,但没有被调用...

2 个答案:

答案 0 :(得分:1)

您似乎正在寻找的事件是Window.Activated

  

当系统激活或停用Window时会发生此事件。应用程序可以通过检查WindowActivatedEventArgs.WindowActivationState属性来确定Window激活的状态。窗口可以在屏幕上显示但不是活动的(例如,在快照应用程序中)。此外,如果系统的任何其他部分将焦点从窗口移开,则会发生此事件。这可能是由于用户交互或代码而发生的,WindowActivationState将指示发生了哪些操作。

Juste请注意,当窗口并且失去焦点时,此事件将会触发。因此,您必须测试事件参数以确定发生了什么。

您可以使用Window.Current获取当前窗口的实例。

答案 1 :(得分:0)

你尝试过这样的事吗?

如果用户点击回您的应用,OnGotFocus将会出现,您可以自己动手。

public sealed partial class HubPage : Page
{
    private bool hasFocus = true;    

    protected async override void OnGotFocus(RoutedEventArgs e)
    {
        base.OnGotFocus(e);

        if (!hasFocus)
        {
            var msg = new MessageDialog("Focus", "Focus");
            await msg.ShowAsync();
            hasFocus = true;
        }
    }

    protected override void OnLostFocus(RoutedEventArgs e)
    {
        base.OnLostFocus(e);

        hasFocus = false;
    }
}