使用模板10在UWP应用程序中创建第二个窗口时出现异常0xE0434352
我找到了,也找到了一个相关的答案,但当我尝试使用模板10实现多个窗口时,仍然会遇到例外 (我还发现了这样一个问题,它似乎建议完全跳出模板10,直接使用框架。当我在答案中尝试代码时,我得到了一个CLR异常。因此我放弃了这种方法,回到了其他问题) 据我从描述和中了解,您需要创建一个新的框架和导航服务,将导航服务分配给您的框架,然后使用导航服务导航到新页面 我在导航的页面的ViewModel中尝试了这段代码,但在创建框架时,第一行出现异常0xE0434352使用模板10在UWP应用程序中创建第二个窗口时出现异常0xE0434352,uwp,template10,Uwp,Template10,我找到了,也找到了一个相关的答案,但当我尝试使用模板10实现多个窗口时,仍然会遇到例外 (我还发现了这样一个问题,它似乎建议完全跳出模板10,直接使用框架。当我在答案中尝试代码时,我得到了一个CLR异常。因此我放弃了这种方法,回到了其他问题) 据我从描述和中了解,您需要创建一个新的框架和导航服务,将导航服务分配给您的框架,然后使用导航服务导航到新页面 我在导航的页面的ViewModel中尝试了这段代码,但在创建框架时,第一行出现异常0xE0434352 Frame secondaryFrame
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对这个问题的回答,我现在在GitHub上找到了多个窗口的UWP示例。它在UWP示例的1.1.13p版本中提供,位于/samples/MultipleViews/ViewModels/ 我最初使用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。
我已经在我的第二页上尝试过了,另一页通常打开时没有问题,我创建了一个空白页。所有尝试都会得到相同的异常
据我从这里和这里的描述中了解,您需要创建一个新的框架和导航服务,将导航服务分配给您的框架,然后使用导航服务导航到新页面
您可以使用NavigationService
方法实现此行为
您还可以使用ViewService
方法
请确保它是在UI线程中调用的
据我从这里和这里的描述中了解,您需要创建一个新的框架和导航服务,将导航服务分配给您的框架,然后使用导航服务导航到新页面
您可以使用NavigationService
方法实现此行为
您还可以使用ViewService
方法
请确保它是在UI线程中调用的。我发现了导致异常的原因。
导航服务在示例中仅被引用为“
NavigationService
”时为空。我不得不引用它为
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)
{
}
}
});
}
(该模块包含“使用”和作为参考,显然我已经清理/构建了好几次)我发现了导致异常的原因。
导航服务在示例中仅被引用为“
NavigationService
”时为空。我不得不引用它为
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)
{
}
}
});
}
(该模块包含“使用”并作为参考,显然我已经清理/构建了好几次)感谢您的回复。我是否应该创建第二个导航服务?是的,如果将窗口当前内容设置为
secondaryFrame
,尽管可以创建多个窗口,但原始窗口内容将变为secondaryFrame
。这将很难管理。对不起,我觉得这个答案和评论很难理解。我想打开另一个包含不同内容的窗口,同时保持主窗口不变。我已经尝试过使用第一个NavigationService的OpenAsync函数打开第二个窗口,但没有成功。你是说这是正确的吗?我的代码在ViewModel中,所以可能是线程问题。您能否共享一个示例来重现此问题?我已在ViewModel中测试了您的代码。它在我这边起作用。谢谢你的回复。我是否应该创建第二个导航服务?是的,如果将窗口当前内容设置为secondaryFrame
,尽管可以创建多个窗口,但原始窗口内容将变为secondaryFrame
。这将很难管理。对不起,我觉得这个答案和评论很难理解。我想打开另一个包含不同内容的窗口,同时保持主窗口不变。我已经尝试过使用第一个NavigationService的OpenAsync函数打开第二个窗口,但没有成功。你是说这是正确的吗?我的代码在ViewModel中,所以可能是线程问题。您能否共享一个示例来重现此问题?我已在ViewModel中测试了您的代码。它在我这边起作用。
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)
{
}
}
});
}