【问题标题】:open secondary view on current virtual desktop in uwp apps在 uwp 应用程序中的当前虚拟桌面上打开辅助视图
【发布时间】:2018-01-15 02:07:14
【问题描述】:

微软关于虚拟桌面的文档说:

为支持这一概念,应用程序应避免自动将用户从一个虚拟桌面切换到另一个。只有用户应该发起该更改。为了支持这一点,新创建的窗口应该出现在当前活动的虚拟桌面上。此外,如果应用程序可以重用当前活动的窗口,它应该只重用当前活动虚拟桌面上的窗口。否则,应创建一个新窗口。

我完全同意并希望看到我的 UWP 应用完全这样做。但是,在虚拟桌面 A 上启动应用程序并切换到虚拟桌面 B 后,再次打开应用程序(通过开始菜单或通知)让我回到虚拟桌面OnLaunched 执行之前的桌面 A,因此我的新窗口也驻留在 A 上。

计算器等其他 uwp 应用程序可以在其他虚拟桌面上正确生成新窗口,但如何?

【问题讨论】:

    标签: uwp multi-window virtual-desktop


    【解决方案1】:

    问题在于ApplicationViewSwitcher.TryShowAsStandaloneAsync 方法总是将新窗口与原始窗口对齐,即使原始窗口位于不同的虚拟桌面上。

    要避免这种情况,您必须禁用系统的默认视图处理。第一次创建根框架的内容时,禁用默认处理:

    ApplicationViewSwitcher.DisableShowingMainViewOnActivation();
    ApplicationViewSwitcher.DisableSystemViewActivationPolicy();
    

    创建新视图时,不要使用ApplicationViewSwitcher.TryShowAsStandaloneAsync 来显示新视图的窗口。改用 LaunchActivatedEventArgs 中的 ViewSwitcher:

    CoreApplicationView newView = CoreApplication.CreateNewView();
    int newViewId = 0;
    await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
    {
        Frame frame = new Frame();
        frame.Navigate(typeof(MainPage), e.Arguments);
        Window.Current.Content = frame;
        Window.Current.Activate();
        var currView = ApplicationView.GetForCurrentView();
        currView.Consolidated += CurrView_Consolidated;
        newViewId = currView.Id;
        await e.ViewSwitcher.ShowAsStandaloneAsync(newViewId);
    });
    

    注意: ViewSwitcher.ShowAsStandaloneAsync 必须在新视图的 UI 线程上调用,这与 ApplicationViewSwitcher.TryShowAsStandaloneAsync 不同!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2018-02-15
      • 2013-03-16
      相关资源
      最近更新 更多