C#:wpf ui 4.0 是如何实现页面导航的?

wpf ui 介绍

wpf ui 是一款我比较喜欢的wpf ui界面开源库,目前已经获得了8.5颗stars,还是很受欢迎的:

wpf ui在vs中也提供了快速开发模板:

让wpf开发者可以快速进行应用开发,已经设置好了模板。

但是我发现最新的模板的页面导航方式跟之前不一样了。

先看下wpf ui的迁移文档:

先简单翻译一下:

迁移计划

本页概述了迁移时需要考虑的关键变更和重要细节。它突出了新功能、已更改的内容以及确保顺利过渡所需的步骤。这不是一份完整的逐步指南,而是一个快速参考,帮助您导航迁移过程中最关键的部分。

抽象包

一些 WPF UI 接口已被移动到独立包 WPF-UI.Abstractions。您无需引用它,它将始终随 WPF-UI NuGet 包自动添加。

导航接口

导航接口已移至独立的 WPF-UI.Abstractions 包中。这样,如果你有与其他项目相关的模型、视图或其他业务服务,这些项目不涉及 WPF,你可以在多个应用程序中共同开发它们。

新命名空间

INavigationAware 和 INavigableView 已移动到 Wpf.Ui.Abstractions.Controls 命名空间。

基于依赖注入的页面创建

IPageService 已更名为 INavigationViewPageProvider。

其默认实现位于新的 Wpf.Ui.DependencyInjection 包中。您只需使用 services.AddNavigationViewPageProvider() 扩展方法,然后在导航中指定要使用此接口。然后 NavigationView 将使用 DI 容器进行页面创建。

导航服务

在主包(WPF-UI)中定义的INavigationService使得导航管理变得简单。您可以用它来方便地在视图模型之间进行注入。我们强烈建议将其设置为单例。

它是如何实现页面导航的?

来到App.xaml.cs:

与实现导航有关的三个地方。

运行程序,来到ApplicationHostService.cs:

首先从依赖注入容器中获取INavigationWindow实例。

转到INavigationWindow接口的定义:

定义了几个和导航有关的函数。

下一步在获取INavigationWindow的时候,会先实例化主窗体的ViewModel。

在这里会为NavigationView这个控件设置SetNavigationControl。

请注意这里的RootNavigation就是指在xaml中使用的那个NavigationView控件:

设置了NavigationView控件中的_pageService:

现在来到导航到主页:

再到:

中由于现在_pageService已经设置了,会调用它的GetPage方法:

来到:

来到:

进行内容控件的更新。

现在就来到了首页:

现在我点击Data就会触发NavigationViewItemClick事件:

又是刚刚那样来到NavigateInternal实现页面导航:

还是通过_pageService找到对应页面,然后进行控件内容更新。

然后就会跳转到新的页面:

相关推荐
影寂ldy9 小时前
C# try-catch 异常处理全套笔记
服务器·数据库·c#
TeamDev10 小时前
JxBrowser 9.3.0 版本发布啦!
java·后端·c#·混合应用·jxbrowser·浏览器控件·异步媒体设备
梦帮科技10 小时前
UE5 GAS 实战:用 Gameplay Ability System 搭建「赛博修真」境界与技能体系
c++·人工智能·python·ue5·c#
北域码匠15 小时前
RIPEMD-128哈希算法深度解析
c#·密码学·哈希算法·加密算法·消息摘要·ripemd-128·原生实现
csdn_aspnet17 小时前
C# 截取或匹配字符串内包含指定字符
c#·字符串·正则·string·匹配·截取
hez20104 天前
在 .NET 上构建超大托管数组
c#·.net·.net core·gc·clr
雨落倾城夏未凉10 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫11 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
唐青枫12 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m62512 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net