当前位置: 首页 > news >正文

HandyControl 色系管理工具

blog-hbh-hc-header
基于HandyControl 的换肤逻辑,创建的一个小工具,主要用于添加属于自己的色系皮肤,管理器主要包含如下功能:

  • 加载已有Colors.xaml
  • 对已有色卡进行颜色编辑。
  • 应用编辑之后的色卡到当前编辑软件。
  • 保存当前样式到新的颜色资源文件。
    代码及功能演示会在接下来的文章中进行详细描述。

功能展示

功能主页面,左侧为功能区,右侧为对应选中色系卡片。
选中默认Default
Pasted image 20251116175111.png

切换色系。
Pasted image 20251116175221.png

应用当前样式到当前应用。
Pasted image 20251116175255.png

编辑色卡,点击色卡矩形框部分,弹出对应颜色编辑器,可查看到原始颜色与当前选中色值,点击取消则不更新,选择确定则更新色卡色值。
Pasted image 20251116175506.png

Default为作为基础色系,创建一个橙色色系,修改主色和深主色。
Pasted image 20251116175853.png

修改颜色后,应用当前色系。
Pasted image 20251116175946.png

保存为新色系,保存时需要注意,会默认弹出到软件执行目录中的Themes/Basic/Colors/下,命名规范为Colors[Name].xaml,此处为Orange,输出之后如下:
Pasted image 20251116180249.png

保存成功后,点击确定,左侧列表中将挂载该目录下的所有色系。
Pasted image 20251116180352.png

色系列表更新。
Pasted image 20251116180439.png

色系列表中,可删除非选中项的色卡,本地路径将对应删除目标Colors[Name].xaml
Pasted image 20251116180721.png

确认删除,删除成功,点击确定按钮,页面色系列表自动刷新。
Pasted image 20251116180738.png

刷新列表。
Pasted image 20251116180847.png

项目结构

整体来说,这个小工具项目项目并不复杂,使用的是相对比较简单的结构主体结构如下:

Models/  # 枚举 颜色对象
Services/ # Color服务 Theme服务
Themes/ # 包含对应的Colors.xaml 色系文件
ViewModels/ # 主窗体ViewModel实体
Views/ # 自定义属性编辑框
App.xaml
MainWindow.xaml

对应代码文件如下:
Pasted image 20251116182016.png

代码说明

代码不铺开说明,主要针对ServicesModelsColorEditDialog进行说明,解释流程。

IColorSchemeService.cs 色系色彩服务接口。

public interface IColorSchemeService
{/// <summary>/// 加载颜色色系文件/// </summary>/// <param name="filePath"></param>/// <returns></returns>Task<List<ColorItem>> LoadColorItemsAsync(string filePath);/// <summary>/// 保存色系到本地xaml中/// </summary>/// <param name="filePath">文件保存路径</param>/// <param name="colorItems">颜色集合</param>/// <returns></returns>Task SaveColorItemsAsync(string filePath, IEnumerable<ColorItem> colorItems);/// <summary>/// 验证目录中包含的色系文件/// </summary>/// <param name="directoryPath">色系路径</param>/// <returns></returns>List<string> GetAvailableColorSchemes(string directoryPath);
}

IThemeService.cs 主题服务接口。

public interface IThemeService
{/// <summary>/// 应用当前色系/// </summary>/// <param name="filePath"></param>void ApplyColorScheme(string filePath);
}

换肤实现。

public void ApplyColorScheme(string colorSchemeFilePath)
{var appResources = App.Current.Resources;// 加载新的色系字典var newColorDict = new ResourceDictionary { Source = new Uri(colorSchemeFilePath,UriKind.RelativeOrAbsolute) };// 确保 Theme.xaml 在最后加载,以便 DynamicResource 能引用到新的颜色appResources.MergedDictionaries[0] = newColorDict;var brushesDict = new ResourceDictionary { Source = new Uri(_defaultBrushesPath) };appResources.MergedDictionaries[1] = brushesDict; // 添加或替换 Brushes
}

App.xaml 中添加样式与主题,与HC 的全局样式引入方式一致。

<Application x:Class="ColorSchemeStudio.HC.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:ColorSchemeStudio.HC"xmlns:hc="https://handyorg.github.io/handycontrol"xmlns:converters="clr-namespace:ColorSchemeStudio.HC.Converters"StartupUri="MainWindow.xaml"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><!--<hc:Theme/><hc:StandaloneTheme/>--><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/Theme.xaml"/></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

枚举主要对应着HC 的资源文件Colors.xaml,枚举的名称就是Color资源对应的x:Key

public enum ColorKey
{// Primary Colors[Description("浅主色")]LightPrimaryColor,[Description("主色")]PrimaryColor,[Description("深主色")]DarkPrimaryColor,// 省略内容
}

ColorItem.cs 是对应的和核心数据类。

public class ColorItem : ViewModelBase
{private Color _value;public ColorKey Key { get; set; }public string Name { get; set; } // 通过 EnumHelper.GetDescription(Key) 获取public string Group { get; set; } // 通过 EnumHelper.GetGroup(Key) 获取// 添加属性值变更通知public Color Value{get => _value; set{if (_value == value){return;}SetProperty(ref _value, value);}}public ColorItem(ColorKey key, Color value){Key = key;Value = value;Name = EnumHelper.GetDescription(key);Group = EnumHelper.GetGroup(key);}
}

项目使用

用小工具生成的色系文件Colors[Name].xaml,在引入HC 作为主要库的项目中,建议将色系文件添加到/Themes/Basic/Colors/中,同时设置文件属性为,并在Themes/ 目录中添加一个Skin[Name].xaml,用于合并资源文件,以LightOrange 为例子,创建一个SkinLightOrange.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    Source="pack://application:,,,/HandyControl;component/Themes/Basic/Colors/ColorsLightOrange.xaml"/>

App.xaml 中替换掉SkinDefault.xaml

<ResourceDictionary Source="pack://application:,,,/HandyControl;component/Themes/SkinLightOrange.xaml"/>

整体总结

以上主要是对于小工具的介绍以及核心代码的简单说明,如果需要源码可以直接访问Github,这是开源地址:https://github.com/guanguanchuangyu/ColorSchemeStudio.git,如果觉得对读者有帮助可以点个关注。

http://www.dtcms.com/a/619052.html

相关文章:

  • 做网站需要什么人员wordpress 前台 很慢
  • 什么是网站设计种类做ar的网站
  • 模型部署在docker中对外提供服务
  • 基于KALI_ARPspoof的ARP Poisoning攻击及其防护
  • 萧山网站建设xsszwl免费ppt模板下载app
  • 太原seo网站排名优化网站seo资讯
  • 使用 speechSynchesis.speak()为web程序添加语音
  • 平台网站模板素材图片下载建设网站编程语言
  • extern “C“ _declspec(dllexport)导出函数
  • 堡垒机的概念
  • 工信部网站信息查询做电影解析网站
  • 自贡市网站建设网站建设设计价格
  • 化学式字符串解析:一道考验递归功底的经典题
  • 免费推广网站平台成都定制网站建
  • 【Java 微服务中间件】RabbitMQ 全方位解析:同步异步对比、SpringAMQT基础入门、实战、交换机类型及消息处理详解
  • 做网站的收益lnmp wordpress 伪静态
  • 华为HuaweiCloudStack(一)介绍与架构
  • 招商网站建设定做如何给wordpress增加表单
  • 网站维护项目织梦网站安装播放视频插件下载
  • mysql锁机制入门笔记(备份)
  • Snakemake 从入门到实战:生信自动化工作流搭建指南
  • 深入理解CSS布局:从格子布局到响应式栅格系统
  • 做一个电商网站网站源代码下载软件
  • 网站怎么做网上报名河北网站建设方案
  • 珲春建设局网站备案用网站建设方案书
  • 南京小程序开发网站建设网页设计一页多少钱
  • 做投标的网站南平建设集集团网站
  • 以投资思维做网站h5响应式网站开发
  • 做旅游攻略去什么网站密云网站建设公司
  • Linux 中的 CPU。文章 1. 利用率