【问题标题】:How to recover main view of UWP app when main view of the app is closed but secondary view is still open and opening the app from start menu?当应用程序的主视图关闭但辅助视图仍处于打​​开状态并从开始菜单打开应用程序时,如何恢复 UWP 应用程序的主视图?
【发布时间】:2018-10-08 09:28:37
【问题描述】:

我正在开发一个具有多个视图的 UWP 应用。 (假设我在单独的窗口中打开我的应用程序的设置。)我需要在以下场景中恢复我的应用程序的主视图。

  1. 打开应用程序。
  2. 在辅助视图中打开应用设置。
  3. 关闭应用程序的主视图并保持设置窗口打开。
  4. 从开始菜单或单击应用程序的快捷方式图标打开应用程序。

上述操作将我带到已经打开的辅助视图(设置窗口)。但我需要调出应用的主视图。

在我的App.xaml.cs 文件中,OnLaunched 方法中,CoreApplication.GetCurrentView().IsMain 给了我true,但CoreApplication.GetCurrentView().IsHosted 给了我false。我尝试使用CoreApplication.GetCurrentView().CoreWindow.Activate()Window.Current.Activate();,但都没有帮助,它只是将我带到打开的辅助视图(设置窗口)。

如何调出我的 UWP 应用的主视图?

【问题讨论】:

    标签: c# uwp windows-10-universal


    【解决方案1】:

    对于您的要求,您可以参考MultipleViews官方代码示例。它已经切换到主视图动作。如果主视图关闭,您可以使用它切换到主视图事件。

    private async void GoToMain_Click(object sender, RoutedEventArgs e)
    {
        // Switch to the main view without explicitly requesting
        // that this view be hidden
        thisViewControl.StartViewInUse();
        await ApplicationViewSwitcher.SwitchAsync(mainViewId);
        thisViewControl.StopViewInUse();
    }
    

    【讨论】:

    • ApplicationViewSwitcher.SwitchAsync 用指定的窗口(在我的情况下为新窗口)直观地替换调用窗口(在我的情况下为辅助视图)。但我需要两种观点都存在。让用户当前所在的辅助视图打开。同时,我应该在一个单独的窗口中调出主视图。
    • emm,我没明白你的意思,你能解释一下或者分享一下图表吗?
    • 我找到了解决问题的方法。我已将其作为单独的答案发布。感谢您宝贵的时间和建议:)
    • 太好了,请在下面发布您的答案并接受它或根据我的回复进行编辑,以方便稍后访问此主题的人,感谢您的理解。
    【解决方案2】:

    我找到了解决问题的方法。我的要求是,当应用程序的主窗口已关闭,但辅助窗口仍处于打开状态,并且用户尝试从开始菜单或单击应用程序图标打开应用程序时,我应该调出应用程序的主视图在单独的窗口中,而不关闭用户当前所在的辅助视图/窗口。换句话说,只需将应用程序的主窗口放在前面,让辅助窗口就在主窗口后面。所以现在我们将在屏幕上有 2 个窗口:

    1.主窗口

    2.已经打开了二级窗口。

    我通过以下代码实现了这一点。

    App.xaml.cs 文件OnLaunched(LaunchActivatedEventArgs e) 方法中,参数LaunchActivatedEventArgs e 有一个名为CurrentlyShownApplicationViewId 的属性,它给出了用户当前所在的视图的ID(如果有任何应用视图打开)。

    ApplicationView.GetApplicationViewIdForWindow(CoreApplication.GetCurrentView().CoreWindow) 给出应用主视图的 id。

    有了这 2 个 id,我可以在下面的代码的帮助下打开我的应用程序的主窗口。

    Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
    {
     await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
           ApplicationView.GetApplicationViewIdForWindow(
           CoreApplication.GetCurrentView().CoreWindow), 
           ViewSizePreference.Default, e.CurrentlyShownApplicationViewId, 
           ViewSizePreference.Default);
    });
    

    ApplicationViewSwitcher.TryShowAsStandaloneAsync 将我的应用程序的主窗口带回前面,在一个单独的窗口中,使辅助窗口不受干扰。所以现在用户有 2 个窗口 - 应用程序的主窗口以及现有的辅助窗口。

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多