首页 > 其他分享 >Maui学习笔记-系统主题切换

Maui学习笔记-系统主题切换

时间:2025-01-20 12:57:00浏览次数:3  
标签:笔记 get 主题 ThemeInfo AppTheme 切换 Maui static public

Maui提供了一种根据当前应用程序主题设置属性的机制,但是它不包含用于在UI中切换主题的组件,需要我们自行创建。

创建项目 

  • 首先创建一个ThemeInfo类来存储应用程序主题对象及标题。这些对象会在Picker元素中显示。

  • 添加CommunityToolkit.Mvvm工具包,创建一个ThemeSettings主题设置类,来存储可用主题列表和当前可选主题。

public partial class ThemeInfo
{
    public static ThemeInfo System = new(AppTheme.Unspecified, "System");
    
    public static ThemeInfo Light = new(AppTheme.Light, "Light");
    
    public static ThemeInfo Dark = new(AppTheme.Dark, "Dark");
    
    public AppTheme Theme { get; }
    
    public string Caption { get; }
    
    public ThemeInfo(AppTheme theme, string caption)
    {
        Theme = theme;
        Caption = caption;
    }
}

public partial class ThemeSettings:ObservableObject
{
    public static List<ThemeInfo> ThemeList { get; } =
    [
        ThemeInfo.System,
        ThemeInfo.Light,
        ThemeInfo.Dark
    ];

    public static ThemeSettings Current { get; } = new ThemeSettings();

    [ObservableProperty] private ThemeInfo selectedTheme = ThemeList.First();
    
    partial void OnSelectedThemeChanged(ThemeInfo oldValue,ThemeInfo newValue)
    {
        App.Current.UserAppTheme = newValue.Theme;
    }

}
  • 主页中使用Picker元素更改主题。

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MauiApp2;"
             x:DataType="{x:Type local:ThemeInfo}"
          
             x:Class="MauiApp2.MainPage">
    <Grid>
        <Picker
            ItemsSource="{Binding Source={x:Static local:ThemeSettings.ThemeList}}"
            SelectedItem="{Binding Source={x:Static local:ThemeSettings.Current},Path=SelectedTheme}"
            ItemDisplayBinding="{Binding Caption}"
            VerticalOptions="Center"
            HorizontalOptions="Center"/>
            
    </Grid>
   
</ContentPage>

 IOS下运行程序

 

根据当前主题更改图像和状态栏 

  • 在Resources/Image下添加一个SVG文件,属性中设置为MauiImage。

  • 在主页引入图片源,注意虽然添加的是SVG文件,但在使用时后缀为png,因为Maui在构建项目时会将SVG转换为png。

  • 使用CommunityToolkit.Maui工具包中的 IconTintColorBehavior来更改图片颜色。StatusBarBehavior来修改状态栏颜色。

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MauiApp2;"
             x:DataType="{x:Type local:ThemeInfo}"
             xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
             x:Class="MauiApp2.MainPage">
    <ContentPage.Behaviors>
        <toolkit:StatusBarBehavior
            StatusBarColor="{Binding Source={x:Reference label1},Path=TextColor}"/>
    </ContentPage.Behaviors>
    <VerticalStackLayout>
        <Image Source="mark.png">
            <Image.Behaviors>
                <toolkit:IconTintColorBehavior
                    TintColor="{Binding Source={x:Reference label1},Path=TextColor}"/>
            </Image.Behaviors>
        </Image>
        
        <Label
            x:Name="label1"
            Text="Hello"
            TextColor="{AppThemeBinding Dark=Orange,Light=Gray}"/>
    
    
        <Picker
            ItemsSource="{Binding Source={x:Static local:ThemeSettings.ThemeList}}"
            SelectedItem="{Binding Source={x:Static local:ThemeSettings.Current},Path=SelectedTheme}"
            ItemDisplayBinding="{Binding Caption}"
            VerticalOptions="Center"
            HorizontalOptions="Center"/>
            
    
    </VerticalStackLayout>
</ContentPage>

IOS下运行程序

 

标签:笔记,get,主题,ThemeInfo,AppTheme,切换,Maui,static,public
From: https://blog.csdn.net/hivv510/article/details/145260215

相关文章

  • 阅读笔记二
    团队管理与协作的艺术核心内容摘要:团队角色与职责:分析了软件开发团队中常见的角色,如项目经理、产品经理、开发人员、测试人员等,并讨论了各自的责任和协作方式。沟通与合作:强调了有效的沟通对于团队成功的关键作用,介绍了面对面会议、邮件、即时通讯等多种沟通渠道的选择与运用。......
  • JavaScript笔记APIs篇02——DOM事件
     黑马程序员视频地址:黑马程序员前端JavaScript入门到精通全套视频教程https://www.bilibili.com/video/BV1Y84y1L7Nn?vd_source=0a2d366696f87e241adc64419bf12cab&spm_id_from=333.788.videopod.episodes&p=78 目录事件监听(绑定)事件监听其他版本(了解)事件类型事件对象......
  • 圆方树学习笔记
    元方树。下文除特殊强调外,所有图皆为无向图。引入割点:在图中,删除某个点后,导致图不再连通的点。点双连通:在一张图中,取两个点\(u\)、\(v\),无论删去哪个点(除\(u\)、\(v\)自身外),\(u\)、\(v\)都能连通,我们就说\(u\)和\(v\)点双连通。点双连通分量(后文称点双):对于一个无向......
  • 【AIGC-ChatGPT提示词】心灵笔记:打造温暖治愈的职场年终回顾系统
    感谢信任,专栏出现0-1的历史突破❤️❤️好了,开始今天的内容今天继续回馈大家,最近都是可以在自媒体上使用的提示词。提示词在最下方引言在每年岁末时分,我们都期待着对过去一年进行总结与回顾。然而,传统的工作总结往往过于注重数据和绩效,容易忽视个人的情感体验和内心成长......
  • AC 自动机 学习笔记
    耳机声音疑似有点小了,用心旷神怡的话来说大致会是「比果蝇↑嗡嗡声还小」。说到这个就不得不说到年级\(1200-7\)个人生物考不过我一个裸考的,还是有点吓人的。博主为什么不分享一下自己的数学成绩呢,是不屑吗......
  • WebRTC 笔记
    目录通话建立流程特别提醒代码创建 RTCPeerConnection 对象获取本地摄像头/麦克风创建发起方会话描述对象(createOffer)连接的远程对等方属性(setRemoteDescription)建立一条最优的连接方式WebRTC允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的......
  • Kubernetes 指令 操作 笔记
    目录kubectl文档资源类型格式化输出语法kubectl常用命令(K8S)查看k8s下所有资源(pod、service、deploy、副本):kubectlgetall查看k8s下所有资源:查看集群内所有节点:查看名称空间:service操作查看所有service:查看所有service详细信息:删除service:查看kubelet日志:容器操作pod操......
  • echarts 笔记
    @目录echarts地图生成实例化echart对象echart配置语法图例组件X轴Y轴系列列表visualMap组件ECharts数据集(dataset)配置echarts地图生成echarts.registerMap("名",geoJson)geoJson为地图数据实例化echart对象//基于准备好的dom,初始化echarts实例varchart=echa......
  • 202508读书笔记|《飞花令·湖》——满塘秋水碧泓澄,十亩菱花晚镜清
    202508读书笔记|《飞花令·湖》——满塘秋水碧泓澄,十亩菱花晚镜清《飞花令·湖》素心落雪编著,飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”,类似于行酒令,是文人们的一种雅致的娱乐活动。一直都比较喜欢看诗词,包括飞花令......
  • 插入dp学习笔记
    定义插入\(\text{dp}\)适用于计数、求最优解且具有选择、排列元素过程等题目。插入\(\text{dp}\)大致分为两类:乱搞型:状态定义天马行空,但始终围绕着将新元素插入到旧元素已有集合中套路型:\(dp_{i,j}\)表示前\(i\)个数,现在构成\(j\)个连续段的方案数\(/\)最优解,此外......