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找到对应页面,然后进行控件内容更新。

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

相关推荐
wujian831134 分钟前
怎么用千问生成word文档:从「格式崩」到「一键过」,AI导出鸭打通最后半厘米
人工智能·ai·c#·word·豆包·deepseek·ai导出鸭
zlinear数据采集卡2 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
唐青枫3 小时前
别把 ImmutableArray 当成只读 List:C#.NET 不可变数组深入详解
c#·.net
zlinear数据采集卡5 小时前
D223 ADC数据处理流水线:从原始采样值到工程单位的完整转换链
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
花落人散处9 小时前
CDiskClean 开发历程 —— 文件清理_目录树解析实现方案参考
c#
离陌在学C#9 小时前
C# 泛型:从基础到高级应用
开发语言·c#
Vertira10 小时前
C# 与 OpencvSharp 编程[基础目录]
c#
格林威12 小时前
多相机并行采图最佳实践:Task.WhenAll + 异常处理 + 资源释放
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·机器视觉
yuhulkjv33520 小时前
Claude表格复制到word不再崩溃,AI导出鸭批量导出+格式无损一键搞定
人工智能·ai·c#·word·ai导出鸭