首页 > 其他分享 > MAUI新生1.2-XAML语法基础:标记扩展{}

MAUI新生1.2-XAML语法基础:标记扩展{}

时间:2022-11-15 12:57:21浏览次数:50  
标签:控件 元素 Reference 1.2 XAML 绑定 引用 MAUI 属性

标记扩展,使属性值可以引用其他源的值或对象,比如引用资源字典、引用其它控件的属性值、绑定ViewModel类属性值等。标记扩展的语法有大括号{}和尖括号<>两种方式,但x:Array比较特殊,只能使用尖括号,下个章节深入学习标记扩展后,将能够理解两者的区别。为方便学习和记忆,将标记扩展归纳为以下几类:

  • 一、引用资源:StaticResource、DynamicResource
  • 二、引用元素:x:Reference,RelativeSource
  • 三、引用静态成员:x:Static
  • 四、特殊值:x:Array、x:Null、x:Type
  • 五、数据绑定:属性绑定Binding、模板绑定TemplateBinding
  • 六、其它:跨平台OnPlatform/OnIdiom、字体图标FontImage、主题样式AppThemeBinding

 

 

一、引用资源:StaticResource、DynamicResource

每个继承自VisualElement的对象,都有一个Resources属性,属性值为Dictionary<string,object>类型的集合对象,这些集合对象可作为资源,提供给控件树中的子元素使用。

 

 1 <ContentPage
 2     x:Class="MauiApp7.MainPage"
 3     xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
 4     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
 5 
 6     <ContentPage.Resources>
 7         <Color x:Key="PrimaryColor">Black</Color>
 8     </ContentPage.Resources>
 9     <StackLayout>
10         <Label Text="HelloWorld" TextColor="{StaticResource PrimaryColor}" />
11     </StackLayout>
12 
13 </ContentPage>

 

代码解读:

6-8行:在ContentPage的Resources属性上,创建一个Dictionary<string,object>集合元素,其中键为“PrimaryColor”,值为Color类型的对象。Color类型有多个重载构造函数,传入字符串颜色名称,为其中一种创建对象的方式。

10行:通过StaticResource标记扩展,使TextColor属性的值,引用key为“PrimaryColor”的字典资源。框架会从元素自身的Resources属性开始,延着控件树向上查找匹配,如果找到,则返回其值,查找终止。如果未找到,会一直延伸到应用的根元素App.xaml的Application为止。如果在Application的Resources属性中都未找到,则会返回一个XamlParseException编译异常。

补充说明: 

①定义Resources属性的代码中,隐藏了内容属性,完整代码应是:<ContentPage.Resources><ResourceDictionary>......</ResourceDictionary></ContentPage.Resources>

②StaticResource和DynamicResource的使用方法一致,两者唯一的区别在于,如果在运行时修改引用的数据源,StaticResource不会更新,而DynamicResource会实时更新

③资源字典理论上可以放任何对象资源,但一般用于创建样式、颜色、控件模板、数据模板、转换器的对象资源

 

 

 

二、引用元素/控件:x:Reference,RelativeSource

进行属性绑定时,除了MVVM模式中,绑定ViewModel的属性,有时还会绑定当前页面或指定页面的元素/控件的属性值,通过x:Reference或RelativeSource来设置绑定源。

1、x:Reference,直接通过元素名称(使用x:Name属性定义)来引用

 

 1 <ContentPage
 2     x:Class="MauiApp7.MainPage"
 3     xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
 4     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
 5     
 6     <StackLayout Padding="10">
 7 
 8         <Slider
 9             x:Name="slider"
10             Maximum="100"
11             VerticalOptions="Center" />
12 
13         <Label Text="{Binding Value, Source={x:Reference slider}}" />
14 
15         <Label
16             BindingContext="{x:Reference slider}"
17             Rotation="{Binding Value}"
18             Text="HelloWord" />
19 
20     </StackLayout>
21     
22 </ContentPage>

 

代码解读:

9行:通过x:Name属性,给Slider对象定义一个变量名称。

13行:直接定义Binding属性绑定,将属性Text的值,与slider对象的Value属性绑定。其中Binding的属性Source,通过x:Reference扩展标记,引用slider对象。

16-17行:先定义Label元素的绑定上下文BindingContext为slider,此处的BindingContext可以认为就是绑定的Source。定义好绑定上下文后,可以直接通过Binding绑定上下文拥有的属性。

补充说明:

①包含绑定源和路径的完整写法是{Binding Path=Value, Source={x:Reference slider}},上例子Path省略了

 

 

2、RelativeSource,从当前元素开始,延着控件树,以相对位置的方式,查子父或子元素

 

 

三、引用静态成员:x:Static

引用C#定义的静态成员、枚举、常量等

 

 1 //先定义一个C#静态类
 2 public static class AppConstants
 3 {
 4     public static double Title1FontSize = 40;
 5     public static double Title2FontSize = 32;
 6     public static double Title3FontSize = 28;
 7     public static double ContentFontSize = 16;
 8 }
 9 
10 //在XAML中引用静态成员
11 <ContentPage
12     x:Class="MauiApp7.MainPage"
13     xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
14     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
15     xmlns:local="clr-namespace:MauiApp7">
16     
17     <StackLayout Padding="10">
18         <Label Text="This is Title" FontSize="{x:Static local:AppConstants.Title1FontSize}"/>
19         <Label Text="This is Content" FontSize="{x:Static local:AppConstants.ContentFontSize}"/>
20     </StackLayout>
21     
22 </ContentPage>

 

代码解读:

15行:引入命名空间MauiApp7(案例项目名称),并起别名为local

18-19行:通过x:Static引入静态成员,访问方式【命名空间别名:类.属性】

 

 

四、特殊值:x:Array、x:Null、x:Type

 

标签:控件,元素,Reference,1.2,XAML,绑定,引用,MAUI,属性
From: https://www.cnblogs.com/functionMC/p/16890601.html

相关文章

  • Day11.2:标签的使用
    标签的使用当我们在嵌套语句中,例如当我们在for的嵌套循环语句中,想要终止或重新开始当前循环以外的循环的时候,单独仅靠break和continue和还不够,需要在我们想要作用的循环语......
  • 如何在 .NET MAUI 中加载 json 文件?
    引言:按core传统方式添加AddJsonFile("appsettings.json")在windows平台和ssr工作正常,但是在ios和android无法用这种方式,因为资源生成方式不一样.使用内置资源方......
  • 部署Kubernetes 1.25.4初始ipvs模式
    1、环境准备主机名IP地址系统版本k8s-master01k8s-master01.wang.org​kubeapi.wang.orgkubeapi192.168.100.201Ubuntu2004k8s-master02k8s-master02.wang.org192.168.1......
  • 发布 .NET 7 MAUI / MAUI Blazor 应用到 Windows 应用商店
    .NETMAUI目前仅允许发布MSIX包。创建签名证书发布到本地传送门[https://www.cnblogs.com/densen2014/p/16567384.html]使用VisualStudio2022发布到Windows应......
  • Kubernetes-1.25 Container Image Download
    一、Kubernetes-1.25ContainerImageDownload1kube-apiserver#sourceregistry.k8s.io/kube-apiserver:v1.25.2#tagdockerpullswr.cn-north-1.myhuaweicloud.co......
  • WPF中的XAML学习方式
    XMLXAML完全符合XML的标准XML是很容易学习的,要先学会元素、属性、命名空间等语法,然后再看XAML语句的时候就不感到陌生了。XAML语法和C#的关联元素一般都对应......
  • MAUI新生-XAML语法基础:语法入门Element&Property&Event&Command
    一、XAML(MAUI的XAML)和HTML两者相似,都是标签语言(也叫标记)组成的树形文档。每个标签元素,可视为一个对象,通过“键=值”形式的标签属性(Attribute),为对象的属性(Property)、事件......
  • MAUI新生-目录
    MAUI是微软.NET技术栈的跨端UI框架,2022年11月,和.NET7一起正式发布,未来能否和flutter一战?MAUI使用XAML标记语言进行开发,相对HTML而言,更加复杂和繁琐,但功能更加全面严谨。MA......
  • Spark3.1.2与Iceberg0.12.1整合-hadoop和hive的catalog,DDL,隐藏分区(按年,月,天,小时),create
    Spark3.1.2与Iceberg0.12.1整合Spark可以操作Iceberg数据湖,这里使用的Iceberg的版本为0.12.1,此版本与Spark2.4版本之上兼容。由于在Spark2.4版本中在操作Iceberg时不支持D......
  • fastjson1.2.47rce
    漏洞产生原因fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。  环境搭建......