如何关注辅助窗口?

时间:2017-07-05 21:26:30

标签: uwp

我有一个有两个辅助窗口的应用程序。我有按钮,让你在窗口之间切换,工作正常:

ApplicationViewSwitcher.SwitchAsync(_viewToSwitchToId);

当用户通过跳转列表启动我们的应用程序时(在右键单击任务栏中的应用程序图标的最近标题下),我希望能够选择要关注的辅助窗口。

我使用与上面相同的代码,但它不起作用(无论我提供的_viewToSwitchToId是什么,都会自动选择相同的辅助窗口。

我猜测我的应用已经拥有焦点(来自我的按钮)和没有焦点(跳转列表)时调用SwitchAsync()之间存在一些差异。

有什么想法吗?

修改

Git repository重新发布SwitchAsync()问题。

1 个答案:

答案 0 :(得分:1)

  

我希望能够选择关注哪个辅助窗口

我将SwitchAsync()方法添加到OnLaunched进行测试,当从跳转列表中启动应用程序时,应用程序视图将正确切换到指定的视图。例如:

protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
    ...
    CoreApplicationView newView = CoreApplication.CreateNewView();
    int newViewId = 0;
    await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        Frame frame = new Frame();
        Window.Current.Content = frame;
        Window.Current.Activate();           
        newViewId = ApplicationView.GetForCurrentView().Id;
    });
    await ApplicationViewSwitcher.SwitchAsync(newViewId);
    //bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
}

如果您仍然遇到问题,请提供最小的转载项目,以便我们进行测试。

更新: SwitchAsync(Int32, Int32)方法可以很好地适用于您的方案。例如:

// Create 2 secondary views
CoreApplicationView newView = CoreApplication.CreateNewView();
int newViewId = 0;
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
    Frame frame = new Frame();
    frame.Navigate(typeof(page1));
    Window.Current.Content = frame;
    Window.Current.Activate();
    ApplicationView appView = ApplicationView.GetForCurrentView();
    newViewId = appView.Id;
    appView.Title = newViewId.ToString();
    _viewIds.Add(newViewId);
});

bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);

CoreApplicationView newView2 = CoreApplication.CreateNewView();
int newViewId2 = 0;
await newView2.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
    Frame frame = new Frame();
    frame.Navigate(typeof(page2));
    Window.Current.Content = frame;
    Window.Current.Activate();
    ApplicationView appView = ApplicationView.GetForCurrentView();
    newViewId2 = appView.Id;
    appView.Title = newViewId2.ToString();
    _viewIds.Add(newViewId2);
});

bool viewShown2 = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId2);

// Switch to first secondary view, BUT focuses on last secondary view :/
Debug.WriteLine("Switching to secondary view with id: " + _viewIds[0]);
// bool viewShowntoone = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(_viewIds[0]);
await ApplicationViewSwitcher.SwitchAsync(_viewIds[0], _viewIds[1]);