我想在可能的时候使用系统颜色。 如何select不包含在系统颜色中的颜色?
WPF的SystemColors
类,WinForms的SystemColors
类和GetSysColor
API函数的COLOR_*
常量都不包含可用于警告的颜色。 警告通常是红色的,但不能保证它不会接近用户使用的系统颜色。
我想使用标准的系统颜色(通常是白色背景上的未选定项目的黑色文本,海军白色选定的白色,浅灰色的选定未聚焦)在列表框中显示项目。 当一个项目有问题时(例如,涉及到的操作失败),我想让它的文本变成红色以引起注意。 对于所有三种情况(select,select未聚焦,未选定)使用单一颜色已经成问题,因为我发现在浅灰色背景上阅读红色文本是困难的。
只使用自定义颜色,从而避免这个问题是不可接受的行为。 用户期望程序尊重他们的设置。
如何为警告select正确的颜色?
可能新方法值得考虑。 使用诸如Windows事件日志之类的彩色图标。 保持所有文本一致,并使用彩色图标直观地区分不同类型的数据。
“只使用自定义颜色,从而避免这个问题是不可接受的行为。用户期望程序尊重他们的设置。”
但是用户在哪里指定警告的颜色?
如果你想要一个与系统颜色相关的眼睛吸引力的颜色,你可以选择一个项目的颜色并使其饱和一点,或者使它变得更红(例如,使它的RGB红色成分为0xFF,并且取决于用户设置通过其他两个组件的手段)。
我遇到这种问题最接近的是在一个项目中,我们实施了一些颜色处理,以确保CAD程序中的元素不会被用户改变背景颜色“意外”隐藏。 例如,如果背景颜色是黑色的,CAD文件中有一些白色的元素,一切都很好。 白色元素在黑色背景下显然是可见的。 但是,如果用户更改为白色背景,则白色元素不再可见。 我们实现了一些操作(非常重的)元素颜色(绘制期间)的逻辑,以确保它是可见的。 通常情况下,只有当元素的颜色与背景颜色完全相同时,才会使用此逻辑。 后来,我们扩展了检查,以改变元素的颜色,如果它是“靠近”的背景颜色。 这是相当成功的,没有任何元素被意外隐藏。 但是,由此产生的颜色有时是相当可怕的。 这只是我不得不以编程方式处理颜色的一些背景。
这里是一篇文章,介绍如何为给定的背景颜色选择一个好的文字颜色 。 这可能是有限的使用,因为不只是想要一个可见的颜色,你可能会喜欢使用红色(或者一些其他颜色),只有改变它,如果它不容易可读(或不明显指示一个问题)。
这里是一篇文章,介绍如何通过操纵亮度和饱和度来修改颜色,而不是与RGB值混在一起。
您可以使列表中的问题项目具有白色背景,然后在背景中使用红色文本。 我没有做太多的UI编程,所以我不能告诉你在实践中这是多么容易或难(改变ListBox中单个项目的背景颜色)。
使用我发布的第一个链接作为出发点,您可以测试Red,看看它是否通过某种颜色数学“易读”。 红色背景颜色有多远? 如果它“太接近”,放弃并获得更好的对比色(与没有错误的情况下绘制的颜色不同)。
您可以为几种标准Windows配色方案中的每一种(通过切换到这些方案中的每一种,定义满足给定文本颜色和背景颜色的警告颜色)来定义“警告”颜色(或多种颜色)。 如果用户碰巧正在使用这些方案之一(或者至少如果背景颜色和文本颜色与您定义的背景/文本颜色组合之一相匹配),则只需使用您的预定义警告颜色之一即可。 如果用户不是,则尝试通过比较用户的背景颜色和文本颜色与预定义的颜色来找到可能工作的颜色,并使用最匹配的颜色。 如果没有好的匹配(即,给定某些条件,所有可能的预定义警告颜色都不是“易读”的),那么尝试从头开始计算一个可见的颜色,但不是与您要替换的文本颜色相同。
您可以定义几种分立的警告颜色,您可以根据特定的颜色范围轻松读取。 也许你定义了16种颜色。 如果背景颜色属于ColorRange1,Color2属于BackgroundColor2等,则可以选择使用Color1。我不知道您需要定义多少颜色才能确保您对所有可能的颜色组合有一个“良好”的选择。 通过“手动”定义警告颜色,与在运行时尝试生成警告颜色相比,您可能有更好的机会获得相对“美观”的颜色。
如果您可以为给定的背景颜色(例如未选定)预定义单个警告颜色,则可以使用背景颜色之间的比例为选定的聚焦和未聚焦的案例插入相应的警告颜色 – 例如,未选中与选定的聚焦 – 并将该比率(或相反)应用于“基本”警告颜色。
我不认为这些建议中的许多(或任何)特别好。 当我阅读和思考你的问题时,他们只是我的一些想法。