我知道如何使用TryShowAsStandaloneAsync
打开其他窗口。但是,如果原始窗口关闭 - TryShowAsStandaloneAsync
失败(为什么?)。 And I don't know how to "revive" it(原始窗口)。
但“照片”似乎与桌面应用程序一样正常。它是如何做到的? (我想模仿那个。)可以打开一个带有图像的窗口,打开另一个窗口,关闭第一个窗口,然后仍然可以打开更多窗口。
任何方式都可以 - 在没有主窗口显示的情况下启动窗口的某种方式,或者在关闭后重新启动主窗口的某种方式(为了使它成为必须打开的新窗口),或者某些方法其他方式。
答案 0 :(得分:4)
查看MultipleViews sample app。这个应用确实有您正在描述的问题。
您创建的每个视图都有自己的UI线程,因此也有调度程序。 此应用程序的关键是从当前活动窗口的调度程序调用{{1}}。
在示例的TryShowAsStandaloneAsync
事件中,代码使用启动参数中的视图ID查找对当前打开的视图的引用。然后,它使用与该视图关联的调度程序在该视图的UI线程上使用OnLaunched
调用UI代码。您应该使用打开窗口的该线程来调用Dispatcher.RunAsync
来启动新的主视图。然后,您可以使用新的主视图调度程序调用{{1}}。
答案 1 :(得分:1)
在关闭主窗口后回答TryShowAsStandaloneAsync
失败的原因:
我认为TryShowAsStandaloneAsync
尝试使用主视图作为锚视图(即,相对于新窗口放置的窗口)。
关闭主窗口TryShowAsStandaloneAsync
失败,因为它没有锚视图。
解决方法是通过TryShowAsStandaloneAsync的重载指定打开的视图的anchorViewId
(在关闭主窗口之前打开的新窗口之一):
await ApplicationViewSwitcher.TryShowAsStandaloneAsync(
viewIdToShow, // Id of a new view, or of your hidden main view
ViewSizePreference.Default,
anchorViewId, // Id of one of your visible windows
ViewSizePreference.Default);
来自this answer。
答案 2 :(得分:-3)
我不确定你是否使用Dispatcher.RunAsync
来创建视图,即:
async private void Button_Click(object sender, RoutedEventArgs e)
{
CoreApplicationView newView = CoreApplication.CreateNewView();
int newViewId = 0;
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.High, () =>
{
var frame = new Frame();
frame.Navigate(typeof(MainPage), newViewId);
Window.Current.Content = frame;
// In Windows 10 UWP we need to activate our view first.
// Let's do it now so that we can use TryShow...() and SwitchAsync().
Window.Current.Activate();
newViewId = ApplicationView.GetForCurrentView().Id;
});
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);
}
有关详细信息,请参阅:https://daxsnippets.wordpress.com/2015/07/09/windows-10-create-views/