当应用程序的主视图关闭但辅助视图仍然打开并从开始菜单打开应用程序时,如何恢复 UWP 应用程序的主视图?

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 应用程序。 (假设我在单独的 window 中打开我的应用程序设置。)我需要在以下情况下恢复我的应用程序的主视图。

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

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

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

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

根据您的要求,您可以参考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();
}

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

1.Main window

2.Already 开了二级 window.

我通过下面的代码实现了这个。

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

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

有了这 2 个 id,我可以在下面的代码的帮助下调出我的应用程序的主 window。

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

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