【愚公系列】2022年12月 MAUI在线课堂项目-底部导航设计

举报
愚公搬代码 发表于 2022/12/30 23:12:18 2022/12/30
【摘要】 前言.NET MAUI是日益流行的Xamarin.Forms工具箱的演变,该工具箱本月已经有6年历史了。多年来, UPS,Ernst&Young和Delta等公司一直在利用.NET上Xamarin的移动专业知识来推动其业务发展。从一开始就有些。它在帮助小型企业最大化其95%以上代码共享的开发投资并击败竞争对手进入市场方面也非常成功。.NET MAUI将这一成功扩展到了移动设备上,从而囊括了...

前言

.NET MAUI是日益流行的Xamarin.Forms工具箱的演变,该工具箱本月已经有6年历史了。多年来, UPS,Ernst&Young和Delta等公司一直在利用.NET上Xamarin的移动专业知识来推动其业务发展。从一开始就有些。它在帮助小型企业最大化其95%以上代码共享的开发投资并击败竞争对手进入市场方面也非常成功。.NET MAUI将这一成功扩展到了移动设备上,从而囊括了桌面设备,这是在两者之间构建多平台应用程序的最佳方法,尤其是我们的新设备(例如新的Surface Duo)。

.NET MAUI简化了.NET开发人员的选择,提供了一个单一堆栈来支持所有现代工作负载:Android,iOS,macOS和Windows。每个平台和UI控件的本机功能都可以通过一个简单的跨平台API触手可及,您可以在提供不妥协的用户体验的同时共享比以前更多的代码。

一、首页设计

MainPage.xaml

<?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="YG.MauiLesson.MainPage">
    <!--RadioButton样式设计-->
    <ContentPage.Resources>
        <Style TargetType="RadioButton">
            <Setter Property="TextColor" Value="#DDD"/>
            <Setter Property="ControlTemplate">
                <Setter.Value>
                    <!--RadioButton.ControlTemplate = new ControlTemplate()-->
                    <ControlTemplate>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition/>
                                <RowDefinition Height="auto"/>
                            </Grid.RowDefinitions>

                            <Label Text="{TemplateBinding Value}"
                                   TextColor="{TemplateBinding TextColor}"
                                   FontFamily="IconFont"
                                   FontSize="24"
                               HorizontalOptions="Center" VerticalOptions="Center"/>

                            <Label Text="{TemplateBinding Content}" Grid.Row="1" HorizontalOptions="Center"
                               VerticalOptions="Center" TextColor="{TemplateBinding TextColor}" FontSize="12" Margin="0,3"/>

                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <!--WPF  Style.Trigger与ControlTemplate.Triggers   区别?-->
            <Style.Triggers>
                <!---->
                <Trigger TargetType="RadioButton" Property="IsChecked" Value="True">
                    <Setter Property="TextColor" Value="Orange"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ContentPage.Resources>
    <Grid>
        <!--上下布局-->
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="60"/>
        </Grid.RowDefinitions>
        <!--内容页面-->
        <Frame x:Name="content" Content="{Binding Page}" BorderColor="Transparent" CornerRadius="0" Padding="0"/>

        <!--导航页面-->
        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <RadioButton Content="首页" CheckedChanged="RadioButton_CheckedChanged"
                         Value="&#xe62e;" BindingContext="HomeView" IsChecked="True"/>
            <RadioButton Content="分类" Grid.Column="1" BindingContext="ClassifyView"  CheckedChanged="RadioButton_CheckedChanged" Value="&#xe611;"/>
            <RadioButton Content="发现" Grid.Column="2"  Value="&#xe746;" CheckedChanged="RadioButton_CheckedChanged"/>
            <RadioButton Content="课程" Grid.Column="3"   Value="&#xe600;" CheckedChanged="RadioButton_CheckedChanged"/>
            <RadioButton Content="我的" Grid.Column="4"   Value="&#xe649;" CheckedChanged="RadioButton_CheckedChanged"/>
        </Grid>
    </Grid>

</ContentPage>

MainPage.xaml.cs

using System.Reflection;
using YG.MauiLesson.ViewModels;
using YG.MauiLesson.Views;

namespace YG.MauiLesson;

public partial class MainPage : ContentPage
{
    MainViewModel viewModel = new MainViewModel();
    public MainPage()
    {
        InitializeComponent();

        this.BindingContext = viewModel;
        //默认首页
        viewModel.Page = new HomeView();
    }
    //
    private void RadioButton_CheckedChanged(object sender, CheckedChangedEventArgs e)
    {
        if (e.Value)
        {
            viewModel.Page = null;
            var button = sender as RadioButton;
            Type type = Assembly.GetExecutingAssembly().GetType("YG.MauiLesson.Views." + button.BindingContext.ToString());
            viewModel.Page = (View)Activator.CreateInstance(type);
        }
    }
}


MainViewModel.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace YG.MauiLesson.ViewModels
{
    //INotifyPropertyChanged界面通知接口
    internal class MainViewModel : INotifyPropertyChanged
    {
        private View _page;

        public View Page
        {
            get { return _page; }
            set
            {
                _page = value;
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Page)));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}

二、效果

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。