首页 > 其他分享 >MAUI新生1.8-XAML语法基础:Markup语法及CommunityTookit简介

MAUI新生1.8-XAML语法基础:Markup语法及CommunityTookit简介

时间:2022-11-23 18:24:24浏览次数:71  
标签:C# Text XAML 1.8 语法 new Markup

一、什么是Markup语法

XAML可以使用等效的C#后台代码,即可以用C#写UI。但是,C#代码还稍显繁琐,所以在C#代码基础上,由CommutityToolkit提供了Markup扩展包,可以使用更加流畅的C#语法来写UI。通过如下案例来对比一下三者差异:

<!--XAML-->
<ContentPage
    ......>

    <VerticalStackLayout>
        <Label x:Name="label" Text="HelloWorld" TextColor="AliceBlue"/>
        <Button Text="点击修改为中文问好" Clicked="Button_Clicked"/>
    </VerticalStackLayout>

</ContentPage>

//后台代码增加事件响应方法
private void Button_Clicked(object sender, EventArgs e)
{
    label.Text = "你好,世界";
}
//等效的C#代码
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        var lable = new Label { Text = "HelloWorld", TextColor = Colors.AliceBlue };
        var button = new Button { Text = "点击修改为中文问好" };
        button.Clicked += (s, e) => { lable.Text = "你好世界"; };
        Content = new VerticalStackLayout { 
        
            Children = {lable,button}
        };  
    }
}
//等效的Markup语法
//不需要定义partial类,MainPage直接改名为MainPage.cs
public class MainPage : ContentPage
{
    public MainPage()
    {
        var label = new Label().Text("HelloWorld").TextColor(Colors.Red);
        Content = new VerticalStackLayout
        {
            Children =
            {
                label,
                new Button()
                    .Text("点击修改为中文问好")
                    .Invoke(button=>button.Clicked+=(s,e)=>{label.Text = "你好世界"; })
            }
        };
    }
}

//目前Markup语法还不完善,有诸多限制,另外很多属性还无法使用点语法,如BackgroundColor等
//上例的理想写法应该如下,但目前不支持:
public class MainPage : ContentPage
{
    public MainPage()
    {
        Content = new VerticalStackLayout
        {
            Children =
            {
                new Label()
                    .Name("label")
                    .Text("HelloWorld")
                    .TextColor(Colors.Red),

                new Button()
                    .Text("点击修改为中文问好")
                    .Clicked((s,e)=>{label.Text = "你好世界";})
            }
        };
    }
}

PS:使用Markup,要先安装Nuget包CommunityToolkit.Markup,然后在MauiProgram.cs中安装中间件【builder.UseMauiCommunityToolkit();】

 

 

 

三、Markup语法的优点和限制

1、优点

  • 可以使用更加流畅的C#语法来写UI,特别是对XAML没感觉的同学,会很喜欢
  • 很多情况想,C#语法的表达,比XAML更简洁
  • C#支持更好的重构,如重命名,而XAML这方面有限制,改一个类名时,还需要在XAML文件中进行修改
  • C#加载UI,在XAML编译默认开启情况下,性能还会好一丢丢,但如果XAML Compiler不开启,将好很多
  • 比较像Flutter或ArkUI了,这算优点吗?

 

2、限制

  • Markup目前还是微软社区工具包CommunityToolkit的组成部分,算是半官方,未完成转正
  • Markup还处于发展阶段,还存在储多限制和缺漏,无法完全替代XAML,还需时日静待花开
  • Markup是否能够支持现代前端框架的几个重要特征:如声明式状态管理、更方便的逻辑判断和循环控制(if/for)等,还不好说

 

3、结论:目前MAUI框架,XAML还是最好选择,虽然繁琐一点,但功能完备、成熟、灵活,且树形文档结构比Markup更好读(个人观点)

 

 

三、CommunityToolkit究竟是啥:CommunityToolkit是.NET技术栈的社区工具包,对MAUI来说,这个工具包里面有三个库特别重要:

  • CommunityToolkit.Maui:提供了Views/控件、Extensions/扩展、Converters/转换器、Behaviors/行为、Animations/动画、Alerts/弹窗等扩展支持
  • CommunityToolkit.Mvvm:提供MVVM开发模式的支持,这个库在CommunityToolkit>dotnet名下,因为MVVM多个dotnet框架都可以使用
  • CommunityToolkit.Markup:提供Markup语法支持

 

标签:C#,Text,XAML,1.8,语法,new,Markup
From: https://www.cnblogs.com/functionMC/p/16919361.html

相关文章

  • 11月23日内容总结——配置文件修改字符编码、数据库存储引擎、创建表的完整语法、严格
    目录一、字符编码与配置文件mysql配置文件的作用1.\s——查看MySQL相关信息2.配置文件修改默认字符编码类型3.利用配置文件免输入账号信息登陆二、数据库存储引擎1、存储引......
  • 字符编码与配置文件、数据库存储引擎、创建表的完整语法、字段类型之整型、严格模式、
    字符编码与配置文件1.\s查看MySQL相关信息 当前用户、版本、编码、端口号MySQL5.6及之前的版本编码需要人为统一之后的版本已经全部默认统一如果想要永久修改编码配......
  • MySQL数据库简介与基本语法
    目录一、MySQL数据库1.简介2.用管理员身份登录3.密码相关操作4.SQL与NoSQL5.数据库重要概念二、MySQL基本语句1.基于库的增删改查2.基于表的增删改查3.基于记录的增删改查4......
  • mysql初识下载与curd简单语法
    存取数据的演变1.文本文件 文件路径不固定:C:\aaa.txt数据格式不统一:jason:123jason|123jason1232.软件开发目录 规定了数据应该报错再db目录下》》》:路径偏向......
  • Typescript --- 进阶语法
    进阶类型类型别名类型别名用来给一个类起个新名字typeName=string;typeNameResoleve=()=>stringtypeNameOrResolve=Name|NameResolevefunctiongetNa......
  • Typescript --- 进阶语法
    进阶类型类型别名类型别名用来给一个类起个新名字typeName=string;typeNameResoleve=()=>stringtypeNameOrResolve=Name|NameResolevefunctiongetNa......
  • JS有哪些变态语法,你知道吗?
    JS作为一门如此灵活的语言,自然在编码时给我们带来了很多方便,但方便的同时,也衍生出了很多变态的语法,下面我们来梳理一些常见的变态语法,希望你下次在某位大牛的代码中看到这......
  • java8 (jdk 1.8) 新特性——Stream ApI
    在java8中,有两个最重要的改变,一个就是之前了解的Lmbda java8(jdk1.8)新特性——Lambda ,还有一个就是StreamApi 1.什么是StreamAPI 简单来说就是一个类库,里边......
  • MAUI新生1.7-XAML语法基础:UI平台差异OnPlatform&OnIdiom
    MAUI支持跨平台和多设备,可以针对不同平台(Android、iOS、WinUI、MacCatalyst、Tizen),或不同设备(Phone、Tablet、Desktop、TV、Watch),定制不同的UI,应用根据运行环境,自动适应。......
  • Unity Shader 7 CG 语法
    1Cg语法基础如C++、C#和Java等高级语言一样,Cg语言也有自己的数据类型和关键字。掌握和理解这些关键字是写好Cg程序的基础。1.2、Cg的数据类型与关键字基本数据类型:Cg支......