当前位置: 首页 > 编程语言 > C#

使用Template10的多视图而不是一直显示主页面?Share

时间:2023-04-10 19:49:02 C#

使用Template10进行多视图而不总是显示主页?我是T10的新手,正在尝试学习它。这是Template10MultipleWindows在“常规”(意思是非Template10)UWP应用程序中的后续,我学会了做这样的事情(作为一个简短的例子),以支持多个视图:publicApp(){初始化组件();挂起+=挂起;}只读列表_dispatchers=newList();protectedoverrideasyncvoidOnLaunched(LaunchActivatedEventArgse){FramerootFrame=Window.Current.ContentasFrame;if(rootFrame==null){rootFrame=newFrame();rootFrame.NavigationFailed+=OnNavigationFailed;Window.Current.Content=rootFrame;如果(rootFrame.Content==null){rootFrame.Navigate(typeof(MainPage),e.Arguments);}Window.Current.Activate();_dispatchers.Add(CoreWindow.GetForCurrentThread().Dispatcher);}else{varview=CoreApplication.CreateNewView();intwindowId=0;等待view.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,()=>{windowId=ApplicationView.GetApplicationViewIdForWindow(CoreWindow.GetForCurrentThread());varframe=newFrame();frame.Navigate(typeof(MainPage),null);Window.Current.Content=框架;窗口.Current.Activate();ApplicationView.GetForCurrentView().Consolidated+=View_Consolidated;});await_dispatchers[_dispatchers.Count-1].RunAsync(CoreDispatcherPriority.Normal,async()=>{var_=awaitApplicationViewSwitcher.TryShowAsStandaloneAsync(windowId);});_dispatchers.Add(view.Dispatcher);}}privatevoidView_Consolidated(ApplicationViewsender,ApplicationViewConsolidatedEventArgsargs){_dispatchers.Remove(For)Current.Get;ApplicationView.GetForCurrentView().Consolidated-=View_Consolidated;现在:如何使用Template10执行此操作?我查看了https://github.com/Windows-XAML/Template10/wiki/Multiple-Views示例,但无法弄清楚更具体地说,我想在使用协议激活时转到特定页面(使用汉堡包模板)。到目前为止,这是我得到的:publicoverrideasyncTaskOnStartAsync(StartKindstartKind,IActivatedEventArgsargs){if(protocolArgs!=null&&protocolArgs.Uri!=null){await.Asyncation(Open.Asyncationtypeof(Views.DetailPage));//协议激活}else{awaitNavigationService.NavigateAsync(typeof(Views.MainPage));//常规激活}}除了使用OpenAsync还显示主页(以及DetailPage)之外,这是有效的。我使用上述“常规”UWP方法没有问题。我怎样才能让它按照我的意愿工作?我相信这很简单。到目前为止,我喜欢T10-感谢Jerry和团队的贡献。编辑更多细节根据以下建议,我将代码(在App.xaml.cs中)更改为:publicoverrideasyncTaskOnStartAsync(StartKindstartKind,IActivatedEventArgsargs){如果(protocolArgs!=null){varpageName=protocolArgs。乌里。绝对路径;如果(!字符串。IsNullOrEmpty(pageName)){字符串pageId=protocolArgs。乌里。本地路径;varpageQuery=protocolArgs.Uri.Query;//在这里您将导航到“pageId”指定的页面...例如:if(pageId=="foo")awaitNavigationService.OpenAsync(typeof(Views.FooPage),null,pageQuery);elseif(pageId=="bar")awaitNavigationService.OpenAsync(typeof(Views.BarPage),null,pageQuery);否则等待NavigationService.NavigateAsync(typeof(Views.MainPage));}}else{awaitNavigationService.NavigateAsync(typeof(Views.MainPage));}}和:publicoverrideUIEElementCreateRootElement(IActivatedEventArgsargs){varservice=NavigationServiceFactory(BackButton.Attach,ExistingContent.Exclude);varprotocolArgs=args作为ProtocolActivatedEventArgs;varpageName=protocolArgs?.Uri.AbsolutePath;如果(!string.IsNullOrEmpty(pageName)){返回新框架();<<------------错了吗?}returnnewModalDialog{DisableBackButtonWhenModal=true,Content=newViews.Shell(service),ModalContent=newViews.Busy(),};现在,我有一个空白表单,在使用协议激活时也会显示(而不是Sunteen指出的Shell表单),因为(我认为)上面标记为“错误”的行是我对CreateRootElement需要的理解已执行,但是当协议激活应用程序时,我没有/不想显示根框架;但是必须返回CreateRootElementSomething。正如您在我的示例中看到的那样,它与MultipleViews示例并不完全相同,因为它始终有一个根框架。注意:另外,我认为对于T10,我不应该/不能使用Sunteen建议的直接导航:导航必须全部由T10处理。谢谢。除了使用OpenAsync还显示主页(以及DetailPage)之外,此方法有效我假设您的意思是还显示Shell.xaml页面。这是因为当前的NavigationService属于没有Shell页面的框架,在CreateRootElement方法导航之前已经创建了Shell页面。我想在激活协议时转到特定页面(使用汉堡包模板)为了满足您的要求,我建议您不要破坏项目中的导航结构,而是针对协议启动的特殊场景创建一个新的框架.例如:publicoverrideasyncTaskOnStartAsync(StartKindstartKind,IActivatedEventArgsargs){//TODO:在此处添加长时间运行的任务varprotocolArgs=argsasProtocolActivatedEventArgs;if(protocolArgs!=nullFulle&&protocolArgs.nuf{=newFrame();newframe.Navigate(typeof(Views.DetailPage));Window.Current.Content=newframe;//协议激活}else{awaitNavigationService.NavigateAsync(typeof(Views.MainPage));//常规激活}}新代码中已经有一个完整的示例,即将推出。其源代码分支v1.1.3phttps://github.com/Windows-XAML/Template10/tree/version_1.1.13p/Samples/MultipleViews/ViewModels最新版本V1.1.2_vs2017是VS2017的模板更新,也有相同的Sample,你贴的代码差不多,有一些调整使其适用于T10以上是C#学习教程:MultipleviewsusingTemplate10insteadofalwaysshowingthemainpage?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你会多加关注,本文收集自网络,不代表立场,如涉及侵权,请点击右下角联系管理员删除。如需转载请注明出处: