明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 598|回复: 6

[界面] 停靠面板颜色跟随主题

[复制链接]
发表于 2025-3-2 11:17:33 | 显示全部楼层 |阅读模式
我们在做一个停靠面板的时候希望其颜色与AutoCAD主题同步,在B站也看过DYH大神的一个演示视频(https://www.bilibili.com/video/B ... ch.video_card.click),刷他其他视频的时候也看过大致的做法,要新建一个类,实现INotifyPropertyChanged,然后根据AutoCAD不同主题,取面板不同地方的颜色,在程序中设定颜色,不过最终也没有成功,功力还是不够

所以自己一直在找相关的资料,通过查询Managed .NET Reference文档查询到有个类PaletteTheme Class 它的属性有几百个之多,大部分是Color和Brush类型的,猜测这些值应该是跟随AutoCAD主题变化的,遂通过反射读取了各个属性的RGB值,果真如此!!
那么我们再做这个功能的时候就可以通过该类获得颜色,省去了自己取色的麻烦,只需要添加一个监控系统属性的事件,监控COLORTHEME系统值,该值变化了更新相应属性值就可以做到了。
我把所有的属性值都整理出来了,放在下面附件里面了,需要的可以自己下载。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2025-3-2 11:55:17 | 显示全部楼层
根本没那么复杂啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-2 12:02:03 | 显示全部楼层

简单的方法能否发一下呢?
回复 支持 反对

使用道具 举报

发表于 2025-3-2 14:29:32 | 显示全部楼层
本帖最后由 gzxl 于 2025-3-2 14:30 编辑

c# 不知道,但 mfc 挺简单的。OnPaint
好像从 CAD2006 到 CAD2025 就四种颜色
的确想得太复杂了
回复 支持 反对

使用道具 举报

发表于 2025-3-2 16:02:45 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2025-3-2 16:04 编辑

如果我猜得没错,
系统变量或者环境变量决定主题,
系统变量事件抓一下就好了,
环境变量就看看注册表的用户配置项

主题就几种颜色而已,
把全部颜色存起来就好了吧.
https://www.cnblogs.com/JJBox/p/11610343.html

而WPF切换逻辑,是根据变量进行联动就好了.
回复 支持 反对

使用道具 举报

发表于 2025-3-3 17:58:09 | 显示全部楼层
greatspark 发表于 2025-3-2 12:02
简单的方法能否发一下呢?

Application.SystemVariableChanged += (s, e) =>
{
     if (e.Name.ToUpper() != "COLORTHEME") return;
     var COLORTHEME = (short)Application.GetSystemVariable("COLORTHEME");
     var blackColor = new SolidColorBrush
     {
         Color = System.Windows.Media.Color.FromArgb(255, 34, 41, 51),
         Opacity = 1
     };
     var whiteColor = new SolidColorBrush
     {
         Color = System.Windows.Media.Color.FromArgb(255, 245, 245, 245),
         Opacity = 1
     };
     启动配置.myUc1.Background = COLORTHEME == 0 ? blackColor : whiteColor;
     //启动配置.myUc1.Foreground = new SolidColorBrush(COLORTHEME == 1 ? Colors.Black : Colors.WhiteSmoke);
     //0   显示深色主题,1   显示浅色主题。
};
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
nslove44202489 发表于 2025-3-3 17:58
Application.SystemVariableChanged += (s, e) =>
{
     if (e.Name.ToUpper() != "COLORTHEME") re ...

可能是我没有说明白,我的这个帖子只是提供了颜色的来源,实现的思路应该和你这个方式差不多吧?
不同版本的cad同一个部件的颜色不一致,如果你这样直接设置颜色,难道每个版本做一个程序吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-3-12 09:49 , Processed in 0.172863 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表