切换导航
{{systemName}}
{{ info.Title }}
{{info.Title}}
{{ menu.Title }}
{{menu.Title}}
登录
|
退出
搜索
.net maui 目录结构
作者:ych
### Maui应用 .NET MAUI(Multi-platform App UI)是一个用于跨平台移动应用开发的框架,让开发人员可以使用单个代码库创建适用于多个设备的应用程序。以下是.NET MAUI项目的典型目录结构: 1.根目录: - 包含解决方案文件(.sln)和全局配置文件等。 2.应用程序项目(例如MyMauiApp): - 包含用于生成应用程序的代码、资源文件、配置文件等。这些文件一般包括: App.xaml 和 App.xaml.cs:应用程序的入口点和主要的应用程序逻辑。 MainPage.xaml 和 MainPage.xaml.cs:应用程序的主页面和相应的代码逻辑。 资源文件夹(如 Images、Fonts 等):存放应用程序所需的各种资源文件。 其他自定义页面、视图模型等。 3.平台特定项目(例如MyMauiApp.Android、MyMauiApp.iOS): - 包含针对特定平台(如Android、iOS、Windows)的代码和资源文件。每个平台都有自己的项目文件夹,其结构可能类似于传统的原生应用项目结构,但是可以共享部分代码和资源。 4.共享代码(Shared Project 或共享项目): - 可能会有一些共享的代码文件夹,其中包含可以在不同平台间共享的业务逻辑、服务、模型等代码。 5.测试项目(Test Projects): - 包含单元测试、集成测试等用于测试应用程序的代码和配置文件。 6.AppShell一般包含以下部分: - AppShell.xaml:XAML 文件,定义了应用程序的整体布局结构,包括导航菜单、标签页栏等。在这里可以定义应用程序的主要导航结构和外观。 AppShell.xaml.cs:与XAML 文件对应的代码文件,包含了对AppShell的逻辑处理,如导航操作、事件处理等。 MenuItem:定义在侧边栏或顶部菜单中的菜单项,用于导航到应用程序的不同页面或执行特定操作。 FlyoutItem:定义侧边栏中的菜单项,可以包含子菜单项和相关的导航目标。 ### Blazor 从 .NET 8 开始,`.NET MAUI Blazor`应用的项目模板进行了大幅度的简化和重构。过去自动创建的 `Pages`、`Shared`和`Data`文件夹默认不再存在,取而代之的是一个更简洁、更模块化的结构。 这是微软为了统一`Blazor`项目结构(包括`Blazor Web App`和`MAUI Blazor`)并减少初始样板代码而做出的有意改变。 `.NET 8`之前 vs`.NET 8`之后的结构对比 为了让您更清晰地理解,我们来看一下新旧模板的区别: 为了让您更清晰地理解,我们来看一下新旧模板的区别: --- #### 以前 (.NET 6 / .NET 7) 的结构: ``` YourProject/ ├── Data/ <-- 存放示例数据模型和服务 │ └── WeatherForecast.cs ├── Pages/ <-- 存放可路由的页面组件 │ ├── Counter.razor │ ├── FetchData.razor │ └── Index.razor ├── Shared/ <-- 存放共享的布局和组件 │ ├── MainLayout.razor │ └── NavMenu.razor └── wwwroot/ └── index.html ``` --- #### 现在 (.NET 8) 的新结构: ``` YourProject/ ├── Components/ <-- ★ 新的核心文件夹 │ ├── Layout/ <-- (替代 Shared) 存放布局组件 │ │ ├── MainLayout.razor │ │ └── NavMenu.razor │ └── Pages/ <-- (替代 Pages) 存放可路由的页面组件 │ ├── Counter.razor │ ├── Home.razor <-- (替代 Index.razor) │ └── Weather.razor <-- (替代 FetchData.razor) ├── Routes.razor <-- ★ 新增文件,用于定义路由 └── wwwroot/ └── index.html ``` #### .NET 8 中的关键变化和“如何弄” ##### 1. `Components` 文件夹:统一管理 * **这是最大的变化**。现在,所有的 Blazor 组件,无论是可路由的“页面”还是可复用的“共享组件”,都推荐放在 `Components` 文件夹下。 * 内部的 `Layout` 和 `Pages` 文件夹只是一种组织约定,你可以根据自己的喜好创建更多子文件夹(例如 `Components/Widgets/`、`Components/Forms/` 等)。 ##### 2. `Routes.razor` 文件:集中式路由 * 在旧模板中,Blazor 会自动扫描 `Pages` 文件夹下的所有带有 `@page` 指令的文件来发现路由。 * 在 .NET 8 中,路由的定义被集中到了根目录下的 `Routes.razor` 文件中。 **`Routes.razor` 的内容如下:** ```razor
``` * `
`:它告诉路由器在哪个程序集中查找带有 `@page` 指令的组件。`typeof(Program).Assembly` 指的就是当前项目。 * `
`:当找到匹配的路由时,会渲染 `
`,并使用 `MainLayout` 作为默认布局。 ##### 3. 不再有 `_Imports.razor` * 在根目录下的 `_Imports.razor` 文件现在被移除了,取而代之的是在 `Components` 文件夹下可能有一个 `_Imports.razor`。全局的 using 语句现在更推荐放在 `MauiProgram.cs` 或 `Program.cs` 中。 ##### 4. 不再有 `Data` 文件夹 * 示例的 `WeatherForecastService` 现在被简化了。它的服务注册直接在 `MauiProgram.cs` 中完成,不再需要一个单独的 `Data` 文件夹来存放模型。 --- #### 如何实现你最初的目标? 现在我们回到你最开始的问题:**在一个 .NET 8 的 MAUI Blazor 项目中,添加一个按钮来触发原生导航。** 操作流程几乎一样,只是文件位置变了: 1. **创建原生页面**: 这一步完全不变。在项目中创建 `Views/NativePage.xaml`。 2. **修改 Blazor 页面**: * 你需要打开的文件**不是** `Pages/Index.razor`,而是 `Components/Pages/Home.razor`。 * 将你的代码添加到这个文件中。 **`Components/Pages/Home.razor` 的代码:** ```razor @page "/"
你好,来自 Blazor!
这是在 .NET 8 模板中的主页。
跳转到原生页面
@code { private async Task GoToNativePage() { // 确保你的 App.xaml.cs 中 MainPage 被 NavigationPage 包裹 if (App.Current?.MainPage?.Navigation != null) { await App.Current.MainPage.Navigation.PushAsync(new MyMauiBlazorApp.Views.NativePage()); } } } ``` **重要提示**: 为了代码健壮性,建议像上面那样添加一个 `if` 判断,确保 `Navigation` 对象不为空。 3. **包裹 NavigationPage**: 这一步也完全不变。你需要去 `App.xaml.cs` 文件,确保 `MainPage` 是 `new NavigationPage(new MainPage())`。 **总结:** 你的思路是完全正确的。在 .NET 8 中,虽然项目结构发生了变化,将 `Pages` 和 `Shared` 文件夹整合到了 `Components` 文件夹下,但 Blazor 组件与 MAUI 原生功能交互的**核心机制和代码逻辑完全没有改变**。你只需要在新的文件位置(`Components/Pages/Home.razor`)进行修改即可。
评论区
先去登录
版权所有:机遇屋在线 Copyright © 2021-2025 jiyuwu Co., Ltd.
鲁ICP备16042261号-1