Avalonia 动态设置主题和色彩

news/2025/1/19 23:01:50/文章来源:https://www.cnblogs.com/ff-king/p/18680465

四套主题Default、Forest、Lavender、Nighttime,2种色彩Dark和Light

不同主题下需要显示的颜色不同,不同的色彩需要显示的图标颜色不同。

首先需要4个主题样式文件 Default.axmal、Forest.axmal、Lavender.axmal、Nighttime.axmal

2套图标资源,Dark和Light

动态实现:
1.资源(举个例子)

<Design.PreviewWith>

</Design.PreviewWith>

<ResourceDictionary.ThemeDictionaries>

avares://YourProjectName/Assets/Dark/default.png
avares://YourProjectName/Assets/Dark/auto.png
avares://YourProjectName/Assets/Dark/close.png

</ResourceDictionary.ThemeDictionaries>

2.动态加载资源:

region 定义主题色切换方法

///


/// 切换为浅色主题
///

public void SwitchToThemeColor(bool isDark)
{
if (Application.Current is { } app)
{
if (isDark)
{
app.RequestedThemeVariant = ThemeVariant.Dark;
}
else
{
app.RequestedThemeVariant = ThemeVariant.Light;
}
ThemeColorInit(isDark);
}
}
///
/// 主题色切换
///

/// 主题名称
/// 色彩类型
public void SwitchToTheme(string themeName, bool isDark)
{
if (StyleIncludes.ContainsKey(themeName))
{
var styleInclude = StyleIncludes[themeName];

    // 清空所有旧样式Application.Current.Styles.Clear();// 加载主题样式Application.Current.Styles.Add(styleInclude);Application.Current.Styles.Add(DefultStyle);if (isDark){Application.Current.RequestedThemeVariant = ThemeVariant.Dark;}else{Application.Current.RequestedThemeVariant = ThemeVariant.Light;}ThemeColorInit(isDark);
}

}
///


/// 通过选择的颜色主题,动态载入资源字典
///

private void ThemeColorInit(bool isDark)
{
try
{
var resources = App.Current.Resources.MergedDictionaries;

    // 清除现有资源字典resources.Clear();// 加载新的资源字典string sourceUri = isDark? "avares://YourProjectName/Resources/DarkResource.axaml": "avares://YourProjectName/Resources/LightResource.axaml";var newResources = new ResourceInclude(new Uri(sourceUri)){Source = new Uri(sourceUri)};resources.Add(newResources);
}
catch(Exception ex)
{Debug.WriteLine(ex.Message);
}

}

endregion

2.Image 绑定
2.1(硬绑定)

2.2 动态绑定(根据当前设置的色彩动态更新)

ResourceKeyConverter的实现(Conver文件)
///


/// ResourceKey״̬
///

public class ResourceKeyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is string resourceKey)
{
// 获取当前主题
var currentTheme = Application.Current.RequestedThemeVariant;
// 根据当前主题获取相应的资源字典
string themeKey = currentTheme == ThemeVariant.Dark ? "Dark" : "Light";

        if (Application.Current?.Resources.TryGetResource(resourceKey, currentTheme, out var resource) == true){return resource;}}return null;
}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{throw new NotImplementedException();
}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/871902.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[JavaScript] 深入理解流程控制结构

在编程中,流程控制是指控制代码执行顺序的机制。通过流程控制结构,我们可以根据不同的条件执行不同的代码块,实现逻辑判断、循环遍历和跳出循环等功能。常见的流程控制语句有:if-else、switch-case、for、while,以及控制语句break和continue。本文将详细讲解这些控制结构的…

ELF2开发板(rk3588飞凌)

ELF2开发板(飞凌嵌入式) 开箱包裹内容打开包装,你可以看到以下物品一个绿联的usb3.0读卡器、sandisk的32g内存卡(太好了) rk3588 4g+32g emmc版本ELF2开发板 输出为12v 3A的电源适配器(和ipad的充电器外观好像)图1 外包装盒图2 开箱物品内容图3 ELF2开发板正面图4 ELF2开发…

抗沙箱方式列举

前言 研究过免杀的朋友们一定会碰到过自己的🐎今天还能用,明天就被秒的情况。这种情况大多数是被上传到沙箱然后被沙箱检测和分析发现是🐎,进而记录特征让咱们花好几天写的🐎直接废了。为了提高🐎的存活周期,咱们就需要抗沙箱这门技术。 未加抗沙箱 首先,作为演示我…

K-D树及其应用

K-D树及其应用 简介 在单个维度的范围搜索场景下,如:搜索创建时间最靠近某个日期的商品信息。可以通过遍历所有的商品信息,计算每个商品的创建日期的差值,得到差值最小的商品即可,这样每次查询的时间复杂度为 \(O(n)\);或者通过构造一个 BST,通过日期进行比较查询,这样…

基础动态规划讲解

(标题就叫这个吧,我也没什么主意了) 动态规划,要给这个这个东西下个定义,确实不太好下,他是一种基于状态来思考问题的算法思想 用来表示状态的话,那就是dp,(这么说好抽象),就直接说涉及动态规划的题目怎么处理吧 ,这个还是有步骤可行的,就按如下步骤操作 1.寻找子…

遗传算法个人入门笔记

先举一个简单的求解例子: 变量x,y 函数f(x,y) = (x-5)^2 + (y+3)^2 - 5 求最小值。 def test(x,y):return (x - 5)**2 + (y - 3)**2 - 5显然,这个函数在x=5,y=3时取最小值-5。现在我们尝试用遗传算法解决之。 遗传算法主要是模拟生物进化的过程,将每一个值视作一个生物,有…

excel快速定位到某一行

左上角输入框输入:A100定位到第100行

2024秋季学期 电子技术基础期末复习笔记

这期末也太难了吧,15*2,俩超级难的电路,直接给我算麻了电路分析模拟电路

【牛客训练记录】牛客周赛 Round 77

训练情况赛后反思 打一半吃饭去了,C题看到 ax+by=k 的问题,简单的扩欧exgcd没反应过来,简单数论还是不熟悉TAT,D题DSU计算联通块大小时 \(i\) 打成 \(a_i\) 疯狂 RE 被硬控了十几分钟 A题 输出题目所述的第几个字符串即可 #include <bits/stdc++.h> // #define int l…

LIS于LCS

LIS与LCS是动态规划中最常见的两种情况,LIS也就是最长上升子序列,而LCS是最长公共子序列。 在解决这个问题之前,先要明白为什么是序列,举个例子来说明,在数组 [1,2,3,4,5,6]中,[2,3,5]就是其子序列,也就是说,子序列其实就是数组中存在先后顺序,但不强调连续的子数组。…

层次分析法:数学建模

今天学习了层次分析法和数学建模,这里就简单写一下自己的学习新的,参考的资料是B站上的免费网课,老师讲的不错,可以去围观,学习,希望可以拿个奖。https://www.bilibili.com/video/BV1p14y1U7Nr/?spm_id_from=333.337.search-card.all.click 上面这里是链接。本文的大部分…

那些年我在 HL 集训做的题【某人别催了!】

某人别催了!!!Day 0 1.16 下午到 HL,居然还写了一道题? P8855 [POI2002] 商务旅行 LCA 板子。不理解当时为啥要写这个东东,可能是为了热热身吧。 Day 1 讲整体二分,但是没听懂。貌似是魔改版 CDQ...不管它。但是我似乎发现了一片新天地,一切的一切都从下面的一道题说起…