问题是这些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 不同!