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

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