首页 > 其他分享 >MAUI新生4.6-主题设置LightTheme&DarkTheme

MAUI新生4.6-主题设置LightTheme&DarkTheme

时间:2022-12-22 22:55:26浏览次数:32  
标签:4.6 ResourceDictionary 主题 LightTheme 引用 MAUI DarkTheme xaml 页面

通过主题设置,可以在运行时更改应用的主题外观,比如切换亮色主题和暗黑主题。主题设置并没有新的知识点,基本的原理如下:

  • 定义每个应用主题的ResourceDictionary,每个ResourceDictionary有相同的Key,但值不同。
  • 在根页面App.xaml的资源字典中,引用默认的ResourceDictionary。
  • 使用方式①:直接在页面中,通过DynamicResource扩展标记,引用ResourceDictionary的Key值。
  • 使用方式②:在App.xaml中,定义应用级别的Style,样式值使用DynamicResource扩展标记,引用ResourceDictionary的Key值。页面中,则使用StaticResource扩展标记引用Style。
  • 如需在运行时更改主题,通过后台代码更换ResourceDictionary即可。

 

 

一、在Themes文件夹下,创建MAUI的资源字典文件LightTheme.xaml和DarkTheme.xaml

   

 

 

 

 

 

 

 

 二、在根页面App.xaml的资源字典中,引用默认的ResourceDictionary 

<Application
    ......>
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Styles/Colors.xaml" />
                <ResourceDictionary Source="Resources/Styles/Styles.xaml" />
                <!--引用默认主题资源字典LightTheme.xaml-->
                <ResourceDictionary Source="Themes/LightTheme.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

 

 

 

三、在App.xaml中,定义应用级别的Style(非必要)

<Application
    ......>
    <Application.Resources>
        <ResourceDictionary>
            ......
        </ResourceDictionary>
        <!--定义Style,TargetType为Label-->
        <Style x:Key="PrimaryLabelStyle" TargetType="Label">
            <Setter Property="TextColor" Value="{DynamicResource PrimaryTextColor}" />
            <Setter Property="FontSize" Value="25" />
        </Style>
        <Style x:Key="SecondLabelStyle" TargetType="Label">
            <Setter Property="TextColor" Value="{DynamicResource SecondaryTextColor}" />
            <Setter Property="FontSize" Value="30" />
        </Style>
    </Application.Resources>
</Application>

 

 

 

四、在页面中通过DynamicResource扩展标记引用ResourceDictionary的Key值,或通过StaticResource和Style间接引用

<ContentPage
    ......
    BackgroundColor="{DynamicResource PageBackgroundColor}">
    <StackLayout BackgroundColor="{DynamicResource PrimaryColor}">
        <Label Text="直接绑定ResourceDictionary的Key值①" TextColor="{DynamicResource PrimaryTextColor}"/>
        <Label Text="直接绑定ResourceDictionary的Key值②" TextColor="{DynamicResource SecondaryTextColor}"/>
        <Label Text="通过Style间接绑定ResourceDictionary①" Style="{StaticResource PrimaryLabelStyle}"/>
        <Label Text="通过Style间接绑定ResourceDictionary②" Style="{StaticResource PrimaryLabelStyle}"/>
        <Button Text="切换主题" Clicked="Button_Clicked"/>
    </StackLayout>
</ContentPage>

 

 

 

五、通过后台代码切换主题,本案例使用Button的点击事件

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        //获取当前资源字典
        ICollection<ResourceDictionary> mergedDictionaries = Application.Current.Resources.MergedDictionaries;
        //先将当前资源字典清空,再添回暗黑主题DarkTheme
        if (mergedDictionaries != null)
        {
            mergedDictionaries.Clear();
            mergedDictionaries.Add(new DarkTheme());
        }
    }
}

 

标签:4.6,ResourceDictionary,主题,LightTheme,引用,MAUI,DarkTheme,xaml,页面
From: https://www.cnblogs.com/functionMC/p/16998559.html

相关文章

  • MAUI新生4.5-字体图像集成Font&Image
    一、字体集成:MAUI默认使用OpenSans字体,通过引入新的字体库和图标字体库为案例说明1、案例的字体库,均在www.iconfont.cn下载(1)字体库为阿里巴巴普惠体的Thin35,Alibaba_PuHu......
  • MAUI新生4.4-笔刷Brush
    Brush用于定义控件的外轮廓、背景等属性的值,是为属性赋值的。如Shape类控件的Stroke或Fill属性、Border控件的Stroke属性、Shadow的Brush属性、VisualElement派生类控件的B......
  • MAUI新生4.1-控件视图:控件总览(未完待续)
    根据控件的功能特点,以及个人的习惯,我将MAUI的控件划分为以下几个大类:Page页面类Layout布局类Content单一内容类Collection集合内容类Form表单类Shape形状类辅助功......
  • MAUI新生5.3-样式外观:触发器Trigger
    MAUI的触发器,提供了在运行时动态更改控件样式的方法。在Blazor或Vue中,可以通过三元表达式或绑定class来轻松实现,而MAUI则相对麻烦些,需要通过触发器来实现。触发器,其实就是......
  • 微软跨平台maui开发chatgpt客户端
    image什么是maui.NET多平台应用UI(.NETMAUI)是一个跨平台框架,用于使用C#和XAML创建本机移动(ios,andriod)和桌面(windows,mac)应用。imagechagpt最近......
  • 如何远程调试 MAUI blazor / Blazor Hybrid
    我们知道浏览器模式下Blazor可以使用F12打开开发工具,调试js查看页面元素,那当MauiBlazor提示烦人的anunhandlederrorhasoccurred该怎么进行调试呢?1.VS运......
  • 微慕小程序开源版V4.6版发布
    ​​V4.0版​​以来,开源版完善和优化一直在持续。一、微慕小程序开源版V4.6版更新说明本次更新主要针对近期微信​​对于小程序用户头像昵称获取规则调整​​,核心调整是小程......
  • MAUI新生5.2-样式外观:控件状态样式VisualState
    (当前版本V7.0.94,VisualState有bug)控件状态指控件当前处于什么使用状态,如禁用、聚焦、鼠标悬停等等,当控件进入到某种状态时,可以通过【附加属性】【VisualStateManager.Visu......
  • MAUI开发迁移AVD默认位置释放C盘空间
    默认情况下,VS2022启动MAUI工程后创建的AndroidVirtualDeviceManager(AVD)模拟器会在用户当前目录下,例如:C:\Users\登录账户\.android\avd下,每个Target一个avd文件夹,......
  • MAUI新生3.5-深入理解XAML:行为Behavior
    通过行为Behavior,可以将功能附加到控件上,而不需要在宿主控件上定义,和扩展方法有异曲同功之妙。在MAUI中实现Behavior,有两种方式:①附加行为;②MAUI内置行为。附加行为,通过附......