首页 > 其他分享 >MAUI新生1.5-XAML语法基础:资源字典ResourceDictionary

MAUI新生1.5-XAML语法基础:资源字典ResourceDictionary

时间:2022-11-21 01:44:06浏览次数:34  
标签:1.5 控件 创建 XAML 元素 文件 MAUI 资源 字典

每个派生自VisualElement或Application的对象,都有一个Resources属性,属性值为Dictionary<string,object>类型的集合对象,这些集合对象可作为资源,提供给元素及其在控件树中的子元素使用。当元素引用资源时,根据键名延着控件树往上匹配。如果控件树中,有多个键名匹配的资源,则使用最先匹配到的资源;如直到根元素Application(App.xaml),都没有找到,则出现XamlParseException异常。理论上,在资源字典中,可以创建任何对象资源,但一般在资源字典,主要创建样式、颜色、转换器、控件模板、数据模板等资源。

 

一、创建和使用资源

1、创建资源。在App.xaml文件中,定义根元素Application的资源。这里定义的资源,所有xaml文件的元素都可以使用。

<?xml version="1.0" encoding="UTF-8" ?>
<Application
    x:Class="MauiApp7.App"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
    <Application.Resources>
        <ResourceDictionary>
            <!--  引入外部资源字典文件  -->
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Styles/Colors.xaml" />
                <ResourceDictionary Source="Resources/Styles/Styles.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <!--  颜色资源  -->
            <Color x:Key="PrimaryColor">SkyBlue</Color>
            <Color x:Key="SecondColor">SlateBlue</Color>
            <!--  具名样式资源  -->
            <Style
                x:Key="ButtonStyle"
                ApplyToDerivedTypes="True"
                TargetType="Button">
                <Setter Property="BackgroundColor" Value="Navy" />
                <Setter Property="TextColor" Value="Azure" />
            </Style>
            <!--  未具名样式资源  -->
            <Style TargetType="Label">
                <Setter Property="BackgroundColor" Value="AliceBlue" />
                <Setter Property="TextColor" Value="DarkBlue" />
            </Style>
        </ResourceDictionary>
    </Application.Resources>
</Application>

 

2、使用资源。在MainPage页面中,在StackLayout元素上,也定义了一个样式资源,且与Application上定义的样式资源,TargetType相同,键名要相同,按照匹配机制,优先使用StackLayout上的样式资源。

<ContentPage
    x:Class="MauiApp7.MainPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">

    <StackLayout>
        <!--在StackLayout元素上,也创建一个样式资源-->
        <StackLayout.Resources>
            <Style x:Key="ButtonStyle" TargetType="Button">
                <Setter Property="TextColor" Value="Red" />
            </Style>
        </StackLayout.Resources>
        
        <Label Text="隐式应用未具名样式资源" />
        <Label Text="应用颜色资源" TextColor="{StaticResource PrimaryColor}" />
        <Button Style="{StaticResource ButtonStyle}" Text="应用具名样式资源,相同键名,优先使用StackLayout上的资源" />
        
    </StackLayout>

</ContentPage>

 

 

二、使用独立的资源字典文件

1、创建独立的资源字典文件。在Resources>Styles目录下,创建MyListDataTemplate.xaml文件(新建项选择.NET MAUI ResourceDictionary文件)。

<?xml version="1.0" encoding="UTF-8" ?>
<?xaml-comp compile="true" ?>
<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">

    <DataTemplate x:Key="PersonDataTemplate">
        <ViewCell>
            <Grid ColumnDefinitions="5*,2*,3*">
                <Label Text="{Binding Name}"
                       FontAttributes="Bold" />
                <Label Grid.Column="1"
                       Text="{Binding Age}"/>
                <Label Grid.Column="2"
                       Text="{Binding Location}"
                       HorizontalTextAlignment="End" />
            </Grid>
        </ViewCell>
    </DataTemplate>
    
</ResourceDictionary>

 

2、使用独立的资源字典文件

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
    x:Class="MauiApp7.MainPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:models="clr-namespace:MauiApp7.Models"
    xmlns:scg="clr-namespace:System.Collections.Generic;assembly=netstandard">

    <!--引入MyListDataTemplate.xaml资源字典文件-->
    <ContentPage.Resources>
        <ResourceDictionary Source="Resources/Styles/MyListDataTemplate.xaml" />
    </ContentPage.Resources>

    <StackLayout>
        <ListView ItemTemplate="{StaticResource EmployeeDataTemplate}">
            <!--数据源的定义,使用了泛型List<T>,在Models文件夹下创建Employee实体类,用于承载数据-->
            <ListView.ItemsSource>
                <scg:List x:TypeArguments="models:Employee">
                    <models:Employee Name="zs" Age="18" Location="101" />
                    <models:Employee Name="ls" Age="28" Location="102" />
                    <models:Employee Name="ww" Age="38" Location="103" />
                </scg:List>
            </ListView.ItemsSource>
        </ListView>
    </StackLayout>

</ContentPage>

 

3、合并多个资源字典文件的方式

<ContentPage.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Styles/MyListDataTemplate.xaml"/>
                <!--这里可以引用更多资源字典文件-->
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
</ContentPage.Resources>

 

标签:1.5,控件,创建,XAML,元素,文件,MAUI,资源,字典
From: https://www.cnblogs.com/functionMC/p/16910190.html

相关文章

  • noi 1.5 32 求分数序列和。
    noi1.532。求分数序列和描述有一个分数序列q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,....,其中qi+1=qi+pi,pi+1=qi,p1=1,q1=2。比如这个序列前6项分别是2/1,3/2,5/3,8......
  • Seata 1.5.2 源码学习(Client端)
    在上一篇中通过阅读Seata服务端的代码,我们了解到TC是如何处理来自客户端的请求的,今天这一篇一起来了解一下客户端是如何处理TC发过来的请求的。要想搞清楚这一点,还得从Globa......
  • noi 1.5 30:含k个3的数
    描述输入两个正整数m和k,其中1<m<100000,1<k<5,判断m能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。例如,输入:438333满足条件,输出YES。如......
  • MAUI新生1.4-XAML语法基础:x命名空间xmlns:x
    x命名空间,又叫XAML命名空间,作用于XAML的编译过程。我们知道,XAML代码,最终通过XAML编译器,编译为中间代码IL,并与后台C#代码的编译结果合并。而在编译的过程中,经常需要告诉编译......
  • 1.5 程设论道
    目标培养计算思维激发志趣引领计算人生学习方式任务驱动激发思考提炼总结,从生活中得到求解基本思路举一反三融会贯通提升解决问题能力语法次之多思考思考这个......
  • Seata 1.5.2 源码学习(Client端)
    在上一篇中通过阅读Seata服务端的代码,我们了解到TC是如何处理来自客户端的请求的,今天这一篇一起来了解一下客户端是如何处理TC发过来的请求的。要想搞清楚这一点,还得从Glob......
  • 【Xaml】WPF中Popup 实现类智能感知
    首先要做的事情就是定义一个popup来显示我们需要展示的东西<Popupx:Name="ConfigPopup"Height="auto"Width="150"StaysOpen="False"Placement="Bottom"IsOpen="Fal......
  • 11.5 基础语法
    基础语法数据类型强类型语言:所有变量都必须先定义后才能使用基本类型:​ 整数类型:byte,short,int,long​ 浮点数:float,double​ 字符:char​ boolean:true,false引......
  • Vector底层逻辑 (ArrayList和Vector区别:ArrayList不安全,效率高 默认值为0需要 1.第一次
      (ArrayList和Vector区别:ArrayList不安全,效率高默认值为0需要1.第一次扩容为102.第二次为1.5倍 .Vector安全效率不高默认值为10不需要开始就去扩容直接赋值,满后......
  • 在WPF中将XAML表格文档转换为PDF文件导出
    摘要编写文档模板页面1、新建Page页面,将顶部节点更改为FlowDocument,后台代码不需要,可直接删掉2、实现一个表格页面直接上代码,自己看,其中需要注意的是,如果非静态页面......