首页 > 其他分享 >MAUI新生1.6-XAML语法基础:样式风格Style&Settter

MAUI新生1.6-XAML语法基础:样式风格Style&Settter

时间:2022-11-22 00:11:55浏览次数:133  
标签:1.6 样式 XAML 元素 Settter Style 对齐 边框 资源

一、样式的定义和使用

Style类似于前端的CSS,可以对视觉元素的样式进行有组织的管理,大量减少代码和重复工作量。Style需要结合资源字典使用,将Style定义在资源字典中,元素通过StaticResource或DynamicResource引用样式资源。

 

   

二、引用样式资源的匹配原则

1、元素使用样式资源时,和其它资源一样,延着控件树向上匹配,直到根元素Application为止(在App.xaml文件中)。如果有多个匹配资源,应用第一个匹配到的资源;如果没有匹配资源,则报资源引用异常。按照匹配原则,定义在Application的样式资源为全局样式,所有XAML页面都可以引用;目标元素如果要覆盖样式资源,直接在本元素上定义相应样式属性或将样式属性值设置为Null,如覆盖,【<Label TextColor="Red"/>】;置空,【<Label TextColor="{x:Null}"/>】

 

2、匹配样式资源有三种方式:

  • x:Key方式:当Style显式设置资源键名时,目标元素需要显式引用资源,如【<Lable Style="{StaticResource lableStyle}" Text="显示使用样式资源" />】
  • 无x:Key方式:当Style未显式设置资源键名时,目标元素,不需要引用资源,元素自动使用样式,如【<Lable Text="隐式使用样式资源" />】
  • Class方式:当Style设置Class时,目标元素和x:Key一样需要显式应用资源,和x:Key的区别在于,目标元素可以应用多个Class
<!--使用Class定义样式类-->
<ContentPage
    ......>
    <ContentPage.Resources>
        <Style Class="lableStyle1" TargetType="Label">
            <Setter Property="HorizontalOptions" Value="Center" />
            <Setter Property="VerticalOptions" Value="Center" />
        </Style>
        <Style Class="lableStyle2" TargetType="Label">
            <Setter Property="FontSize" Value="30" />
        </Style>
    </ContentPage.Resources>

    <StackLayout>
        <Label StyleClass="lableStyle1,lableStyle2" Text="使用样式资源" />
    </StackLayout>

</ContentPage>

 

 

 

  三、派生、继承和动态

1、除了目标元素,样式资源还可以应用于目标元素的派生类

<Style TargetType="Button" ApplyToDerivedTypes="True">
    <Setter Property="BackgroundColor" Value="Red" />
</Style>

 

2、样式可以继承,减少重复代码

<ContentPage
    ......>
    <ContentPage.Resources>
        <Style x:Key="baseStyle" TargetType="View" ApplyToDerivedTypes="True">
            <Setter Property="HorizontalOptions" Value="Center" />
            <Setter Property="VerticalOptions" Value="Center" />
        </Style>
    </ContentPage.Resources>
    <StackLayout>
        <StackLayout.Resources>
            <Style x:Key="labelStyle" TargetType="Label" BasedOn="{StaticResource baseStyle}">
                <Setter Property="FontSize" Value="18" />
                <Setter Property="FontAttributes" Value="Italic" />
            </Style>
        </StackLayout.Resources>
        <Label Text="使用了样式继承" Style="{StaticResource labelStyle}" />
    </StackLayout>
</ContentPage>

 

3、动态样式资源,在运行时,可以通过将元素动态绑定的样式更换,达到在运行时动态更改元素样式的功能

<ContentPage
    ......>
    <!--页面资源中定义两个样式lableStyle1和lableStyle2-->
    <ContentPage.Resources>
        <Style x:Key="lableStyle1" TargetType="Label">
            <Setter Property="TextColor" Value="Red" />
        </Style>
        <Style x:Key="lableStyle2" TargetType="Label">
            <Setter Property="TextColor" Value="Green" />
        </Style>
    </ContentPage.Resources>

    <StackLayout>
        <!--Lable元素动态绑定样式lableStyle1-->
        <Label Style="{DynamicResource lableStyle1}" Text="动态更换样式资源" />
        <!--点击按钮,后台代码将lableSytle2赋值给lableStyle1,实现运行时动态更新样式-->
        <Button Clicked="Button_Clicked" Text="点击修改Lable样式" />
    </StackLayout>

</ContentPage>

<!--按钮点击事件Handler后台代码-->
<!--后台代码通过Resources[key]方式获取到资源字典项目-->
public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }
    private void Button_Clicked(object sender, EventArgs e)
    {
        this.Resources["lableStyle1"] = this.Resources["lableStyle2"];
    }
}

 

 

 

四、常用样式属性目录

 1、布局类

背景:Background-背景、BackgroundColor-背景色、HasShadow-是否有阴影

边框:CornerRadius-圆角、BorderColor-边框颜色、BorderWidth-边框宽度、Stroke-边框画笔、StrokeShape-边框形状、StrokeThickness-边框宽度、StrokeDashArray-边框长短线样式、StrokeLineCap-直点和终点样式

宽高:WidthRequest-宽、HeightRequest-高,MaximumWidthRequest、MaximumHeightRequest、MinimumWidthRequest、MinimumHeightRequest

对齐:VerticalOptions-垂直对齐、HorizontalOptions-水平对齐

间距:Margin-外边距,Padding-内边距

 

2、文本类

内容:Text-文内容

颜色:TextColor-文本颜色

字体:FontFamily-字体

大小:FontSize-字体大小

样式:FontAttributes-加粗斜体等、TextDecorations-上划线下划线等、TextTransform-大小写、FontAutoScalingEnabled-本文是否缩放

排列:VerticalTextAlignment-文本垂直对齐、HorizontalTextAlignment-文本居中对齐、CharacterSpacing-文本间距、LineHeight-行距、LineBreakMode-跨行处理、MaxLines-最大行数

 

3、图片类

来源:Source-图片源(图片元素)、ImageSource-图片源(可设置图片的元素,如按钮)

其它:IsLoading-是否显示正在加载、Aspect-缩放模式、IsAnimationPlaying-gif是否播放、IsOpaque-是否设置为不透明

标签:1.6,样式,XAML,元素,Settter,Style,对齐,边框,资源
From: https://www.cnblogs.com/functionMC/p/16913621.html

相关文章

  • MAUI新生1.5-XAML语法基础:资源字典ResourceDictionary
    每个派生自VisualElement或Application的对象,都有一个Resources属性,属性值为Dictionary<string,object>类型的集合对象,这些集合对象可作为资源,提供给元素及其在控件树中的......
  • 网络工程师脚本生成工具V1.6.2(交换机脚本批量生成 SecureCRT vbs脚本)
    由于从事弱电行业,平时网络工程师不在,偶尔需要自己调试交换机。在调试中往往前端几十上百台设备的配置基本一样(除开地址,VLAN,名称不一样外),作为编程业余爱好者,最见不得简单有......
  • MAUI新生1.4-XAML语法基础:x命名空间xmlns:x
    x命名空间,又叫XAML命名空间,作用于XAML的编译过程。我们知道,XAML代码,最终通过XAML编译器,编译为中间代码IL,并与后台C#代码的编译结果合并。而在编译的过程中,经常需要告诉编译......
  • 1.6.2 计算机语言选择
    各种语言的优势根据功能Mathematica适合制作3D图像操作系统限制或偏好PHP适合网页制作操作系统限制或偏好程序执行角度编译型C语言解释型PHP编译型&解释型......
  • 【Xaml】WPF中Popup 实现类智能感知
    首先要做的事情就是定义一个popup来显示我们需要展示的东西<Popupx:Name="ConfigPopup"Height="auto"Width="150"StaysOpen="False"Placement="Bottom"IsOpen="Fal......
  • 在WPF中将XAML表格文档转换为PDF文件导出
    摘要编写文档模板页面1、新建Page页面,将顶部节点更改为FlowDocument,后台代码不需要,可直接删掉2、实现一个表格页面直接上代码,自己看,其中需要注意的是,如果非静态页面......
  • MAUI新生1.3-XAML语法基础:标记扩展原理
    标记扩展,本质上是IMarkupExtension或者IMarkupExtension<T>接口的实现类。这两个接口,均定义了ProvideValue方法。注意,IMarkupExtension<T>继承自IMarkupExtension,如果定义......
  • MAUI新生1.2-XAML语法基础:标记扩展{}
    标记扩展,使属性值可以引用其他源的值或对象,比如引用资源字典、引用其它控件的属性值、绑定ViewModel类属性值等。标记扩展的语法有大括号{}和尖括号<>两种方式,但x:Array比......
  • 第四周学习总结(11.6-11.13)
    两层全连接神经网络的内容要比想象中的多很多,代码量也很多,在cs231n只用了15分钟讲解的东西我用了一周半的时间才完全的消化理解,这周终于完成了全连接神经网络博客的书写htt......
  • 黑苹果 Big Sur 11.6 启动 HiDPI 功能
    黑苹果BigSur11.6启动HiDPI功能NUC10安装了BigSur11.6后,设置HiDPI功能 安装完黑苹果后,由于是1080P分辨率的屏幕,字体显示的非常小,看着很吃力。......