我找到了this SO question,还有一个相关的答案here,但是当我尝试使用模板10实现多个窗口时,我仍然遇到异常。
(我还发现了this SO问题,似乎建议完全跳出Template 10,并直接使用Frame。当我在答案中尝试代码时,我得到了一个CLR异常。所以我放弃了那种方法并回到其他问题)。
据我所知here和here,您需要创建新的框架和导航服务,将导航服务分配到您的框架,然后使用导航服务进行导航到新页面。
我在导航的页面的ViewModel中尝试了此代码,但在创建框架时,它在第一行获得异常0xE0434352。
Frame secondaryFrame = new Frame(); //--->Exception 0xE0434352
var secondaryNav = BootStrapper.Current.NavigationServiceFactory(BootStrapper.BackButton.Attach, BootStrapper.ExistingContent.Exclude, secondaryFrame);
secondaryNav.Navigate(typeof(MySecondaryPage));
Window.Current.Content = secondaryFrame; //activation
为什么创建框架会出现异常?
上面的代码是否正确用于打开辅助窗口?
修改 感谢mvermef对this问题的回答,我现在已经在GitHub上找到了多个窗口的UWP示例。它可以在版本1.1.13p的UWP样本中找到,在/ Samples / MultipleViews / ViewModels /,here中。
我使用NavigationService.OpenAsync()打开辅助窗口的原始尝试与示例中的相应代码行相同。 这是功能:
private async void MyEventHandler(bool openSecondaryWindow)
{
await DispatcherWrapper.Current().DispatchAsync(async () =>
{
if (openSecondaryWindow)
{
try
{
//the next line gets exception 0xE0434352
var control = await NavigationService.OpenAsync(typeof(MySecondaryPage), null, Guid.NewGuid().ToString());
control.Released += Control_Released;
}
catch (Exception ex)
{
}
}
});
}
它仍然会出现异常0xE0434352。 我已经尝试使用我的辅助页面,其他页面通常打开没有问题,并且我创建了一个空白页面。所有尝试都会遇到同样的异常。
答案 0 :(得分:0)
据我在此处和此处的说明中所理解,您需要创建新的框架和导航服务,将导航服务分配给您的框架,然后使用导航服务导航到新页面。
您可以使用NavigationService
OpenAsync
方法以不同的方式实现此行为。
await NavigationService.OpenAsync(typeof(Views.TestPage));
您还可以使用ViewService
OpenAsync
方法。
var viewservice = new ViewService();
await viewservice.OpenAsync(typeof(Views.TestPage));
请确保在UI线程中调用它。
答案 1 :(得分:0)
我发现了似乎引起异常的事情
当示例中简称为“NavigationService
”时,NavigationService为null
我必须将其引用为BootStrapper.Current.NavigationService
。
以下是有效的代码:
private async void MyEventHandler(bool openSecondaryWindow)
{
await DispatcherWrapper.Current().DispatchAsync(async () =>
{
if (openSecondaryWindow)
{
try
{
var control = await BootStrapper.Current.NavigationService.OpenAsync(typeof(MySecondaryPage), null, Guid.NewGuid().ToString());
control.Released += Control_Released;
}
catch (Exception ex)
{
}
}
});
}
(该模块包含在“使用”中并作为参考,显然我已经多次清理/构建了)