.NET MAUI实战 Navigation

1.概要

用过WPF的小伙伴一般都用过Prism,Prism里面的导航概念在MAUI中也有类似的概念,在MAUI中是直接集成在框架中我们不需要安装任何其他的nuget包。直接使用Navigation对象即可,通常在移动平台中使用的更多,桌面程序中。我们先来看看微软官方是如何定义的,如下面代码所示。

public interface INavigation
    {
        IReadOnlyList<Page> ModalStack { get; }
        IReadOnlyList<Page> NavigationStack { get; }

        void InsertPageBefore(Page page, Page before);
        Task<Page> PopAsync();
        Task<Page> PopAsync(bool animated);
        Task<Page> PopModalAsync();
        Task<Page> PopModalAsync(bool animated);
        Task PopToRootAsync();
        Task PopToRootAsync(bool animated);
        Task PushAsync(Page page);
        Task PushAsync(Page page, bool animated);
        Task PushModalAsync(Page page);
        Task PushModalAsync(Page page, bool animated);
        void RemovePage(Page page);
    }

我这里是直接找到了Navigation的上层接口的定义。那我们来看看几个基本的介绍。

名称类型说明
PopToRootAsync方法导航到根目录。
PopAsync方法导航到上一个页面。
PushAsync方法导航到指定页面。

2.详细内容

接下来演示一下基本用法。防止大家被绕晕这里整理了一下导航图,如下:

e5570c1b6827ad707268b9c4f26fb474.png

MainPage.xaml代码:

d6cea44207f075b63490623279c78dc8.png

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiApp1.MainPage">
    <ScrollView>
        <VerticalStackLayout 
            Spacing="25" 
            Padding="30,0" 
            VerticalOptions="Center">
            <Button 
                x:Name="BtnPage1"
                Text="Page1"
                Clicked="BtnPage1_Clicked"
                HorizontalOptions="Center" />
            <Button 
                x:Name="BtnPage2"
                Text="Page2"
                Clicked="BtnPage2_Clicked"
                HorizontalOptions="Center" />
        </VerticalStackLayout>
    </ScrollView>
</ContentPage>
namespace MauiApp1;

public partial class MainPage : ContentPage
{
    public MainPage()
{
        InitializeComponent();
    }

    private void BtnPage2_Clicked(object sender, EventArgs e)
{
        Navigation.PushAsync(new NewPage2());
    }

    private void BtnPage1_Clicked(object sender, EventArgs e)
{
        Navigation.PushAsync(new NewPage1());
    }
}

Page1.xaml代码

b09376fbf2f1f0b60d52853c02fb39a0.png

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiApp1.NewPage1"
             Title="NewPage1">
    <VerticalStackLayout>
        <Label 
            Text="Welcome to .NET MAUI!"
            VerticalOptions="Center" 
            HorizontalOptions="Center" />
        <Button 
                x:Name="BtnNext"
                Text="Netxt Page"
                Clicked="BtnNext_Clicked"
                HorizontalOptions="Center" />
        <Button 
                x:Name="BtnGoback"
                Text="Go back"
                Clicked="BtnGoback_Clicked"
                HorizontalOptions="Center" />
    </VerticalStackLayout>
</ContentPage>
namespace MauiApp1;

public partial class NewPage1 : ContentPage
{
    public NewPage1()
{
        InitializeComponent();
}

    private void BtnNext_Clicked(object sender, EventArgs e)
{
        Navigation.PushAsync(new NewPage2());
    }

    private void BtnGoback_Clicked(object sender, EventArgs e)
{
        Navigation.PopAsync();
    }
}

Page2.xaml代码

0bc61489b63f88d6a8eb457e11f0cf1f.png

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="MauiApp1.NewPage2"
             Title="NewPage2">
    <VerticalStackLayout>
        <Label 
            Text="Welcome to .NET MAUI!"
            VerticalOptions="Center" 
            HorizontalOptions="Center" />
        <Button 
                x:Name="BtnGoback"
                Text="Go to root"
                Clicked="BtnGoback_Clicked"
                HorizontalOptions="Center" />
    </VerticalStackLayout>
</ContentPage>
namespace MauiApp1;

public partial class NewPage2 : ContentPage
{
    public NewPage2()
{
        InitializeComponent();
}

    private void BtnGoback_Clicked(object sender, EventArgs e)
{
        Navigation.PopToRootAsync();
    }
}

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

是的,在.NET MAUI项目中可以嵌入.NET MAUI Blazor项目。.NET MAUI(Multi-platform App UI)是一个跨平台的UI框架,允许开发者使用C#和XAML创建原生移动和桌面应用。而Blazor是一个用于构建交互式Web应用的框架,它允许使用C#代替JavaScript来编写前端逻辑。 通过将Blazor嵌入到.NET MAUI项目中,开发者可以创建跨平台的混合应用,这些应用既可以在Web浏览器中运行,也可以在移动和桌面平台上运行。以下是一些关键点: 1. **共享代码**:使用Blazor和.NET MAUI可以共享大部分代码逻辑,从而减少重复编写代码的工作量。 2. **跨平台**:无论是iOS、Android、Windows还是macOS,开发者都可以使用相同的代码库进行开发。 3. **现代Web技术**:Blazor使用现代Web技术,如HTML、CSSC#,使得前端开发更加高效。 ### 如何在.NET MAUI项目中嵌入Blazor 1. **创建.NET MAUI项目**:首先,创建一个新的.NET MAUI项目。 2. **添加Blazor支持**:在项目中添加Blazor支持,可以通过NuGet包管理器安装`Microsoft.AspNetCore.Components.WebView.Maui`包。 3. **配置BlazorWebView**:在XAML文件中添加`BlazorWebView`控件,并设置其`HostPage`和`AppAssembly`属性。 ```xml <ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:blazor="clr-namespace:Microsoft.AspNetCore.Components.WebView.Maui;assembly=Microsoft.AspNetCore.Components.WebView.Maui" x:Class="MyApp.MainPage"> <blazor:BlazorWebView HostPage="wwwroot/index.html"> <blazor:BlazorWebView.RootComponents> <blazor:Router AppAssembly="MyApp.dll" /> </blazor:BlazorWebView.RootComponents> </blazor:BlazorWebView> </ContentPage> ``` 4. **运行应用**:构建并运行应用,你将能够在移动和桌面平台上看到嵌入的Blazor应用。 通过这种方式,开发者可以充分利用Blazor和.NET MAUI的优势,创建功能强大且跨平台的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值