停靠面板颜色跟随主题
我们在做一个停靠面板的时候希望其颜色与AutoCAD主题同步,在B站也看过DYH大神的一个演示视频(https://www.bilibili.com/video/BV1Ka4y1P79e/?spm_id_from=333.1387.search.video_card.click),刷他其他视频的时候也看过大致的做法,要新建一个类,实现INotifyPropertyChanged,然后根据AutoCAD不同主题,取面板不同地方的颜色,在程序中设定颜色,不过最终也没有成功,功力还是不够:lol所以自己一直在找相关的资料,通过查询Managed .NET Reference文档查询到有个类PaletteTheme Class 它的属性有几百个之多,大部分是Color和Brush类型的,猜测这些值应该是跟随AutoCAD主题变化的,遂通过反射读取了各个属性的RGB值,果真如此!!
那么我们再做这个功能的时候就可以通过该类获得颜色,省去了自己取色的麻烦,只需要添加一个监控系统属性的事件,监控COLORTHEME系统值,该值变化了更新相应属性值就可以做到了。
我把所有的属性值都整理出来了,放在下面附件里面了,需要的可以自己下载。
根本没那么复杂啊
nslove44202489 发表于 2025-3-2 11:55
根本没那么复杂啊
简单的方法能否发一下呢? 本帖最后由 gzxl 于 2025-3-2 14:30 编辑
c# 不知道,但 mfc 挺简单的。OnPaint
好像从 CAD2006 到 CAD2025 就四种颜色
的确想得太复杂了
本帖最后由 你有种再说一遍 于 2025-3-2 16:04 编辑
如果我猜得没错,
系统变量或者环境变量决定主题,
系统变量事件抓一下就好了,
环境变量就看看注册表的用户配置项
主题就几种颜色而已,
把全部颜色存起来就好了吧.
https://www.cnblogs.com/JJBox/p/11610343.html
而WPF切换逻辑,是根据变量进行联动就好了.
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 显示浅色主题。
}; nslove44202489 发表于 2025-3-3 17:58
Application.SystemVariableChanged += (s, e) =>
{
if (e.Name.ToUpper() != "COLORTHEME") re ...
可能是我没有说明白,我的这个帖子只是提供了颜色的来源,实现的思路应该和你这个方式差不多吧?
不同版本的cad同一个部件的颜色不一致,如果你这样直接设置颜色,难道每个版本做一个程序吗? greatspark 发表于 2025-3-5 09:38
可能是我没有说明白,我的这个帖子只是提供了颜色的来源,实现的思路应该和你这个方式差不多吧?
不同版 ...
五楼的意見很保貴,將各個版本對應的顏色讀出來做一個字典,獲取一下顏色字典及當前打開的版本,通過監控系統變量的變化來更改主題。 nslove44202489 发表于 2025-3-3 17:58
Application.SystemVariableChanged += (s, e) =>
{
if (e.Name.ToUpper() != "COLORTHEME") re ...
颜色不是这么简单的,一个主题上的颜色大概有几十个,你要怎么通知到你的界面上,还是要用style写一堆DynamicResource
页:
[1]