警告的“系统”颜色(红色)

时间:2010-12-03 22:25:39

标签: c# wpf windows user-interface colors

我希望在可能的情况下使用系统颜色。如何选择系统颜色中不包含的颜色?

WPF的SystemColors类,WinForms的SystemColors类和GetSysColor API函数的COLOR_*常量都不包含可用于警告的颜色。警告通常是红色的,但不能保证它不会接近用户使用的系统颜色。

我希望使用标准系统颜色在ListBox中显示项目(通常在未选中项目的白色背景上显示黑色文本,选择时为海军白色,选定未聚焦时为浅灰色白色)。当一个项目有问题时(例如,与之相关的操作失败),我想让其文本变为红色以引起注意。对所有三种情况使用单色(选中,选择未聚焦,​​未选中)已经存在问题,因为我发现很难在浅灰色背景上阅读红色文字。

仅使用自定义颜色从而避免问题是不可接受的行为。用户希望程序尊重他们的设置。

如何为警告选择正确的颜色?

3 个答案:

答案 0 :(得分:5)

  

“仅使用自定义颜色   避免这个问题是不可接受的   行为。用户期望程序   尊重他们的设置。“

但是用户在哪里为警告指定颜色?

如果你想要一个引人注目的颜色依赖于系统颜色,你可以采取所选项目的颜色并使其饱和一点,或使其更红(例如使其RGB红色成分为0xFF,它将取决于通过其他两个组件的方式进行用户设置)。

答案 1 :(得分:4)

我遇到这种问题的最接近的是在一个项目中,我们实施了一些颜色操作,以确保CAD程序中的元素不会被用户“意外”隐藏,从而改变背景颜色。例如,如果背景颜色为黑色且CAD文件中有一些白色元素,则一切都很好。在黑色背景下,白色元素显然是可见的。但是,如果用户更改为白色背景,则不再显示白色元素。我们实现了一些逻辑,这些逻辑操纵(非常重手)元素颜色(在绘制期间)以确保它是可见的。通常,如果元素颜色与背景颜色完全相同,则此逻辑仅启动。之后,我们扩展了检查以更改元素颜色,如果它“接近”背景颜色。这是合理的成功,因为没有任何元素被意外隐藏。然而,由此产生的颜色有时非常可怕。这只是我必须以编程方式处理颜色的一些背景知识。

这是post that describes how to pick a good text color for a given background color。这可能是有限的用途,因为不只是想要一种可见的颜色,你可能更喜欢使用红色(或者可能是其他颜色),只有在它不易读取时才会改变它(或者不明显表示存在问题)。

Here is an article that describes how to modify a color by manipulating brightness and saturation而非愚弄RGB值。

您可以使列表中的问题项目具有白色背景,然后在背景中使用红色文本。我没有做过很多UI编程,所以我不能告诉你这在实践中是多么容易或多难(改变ListBox中单个项目的背景颜色)。

使用我发布的第一个链接作为起点,您可以测试红色以查看某些颜色数学是否“易于阅读”。红色与背景颜色有多远?如果它“太近”,请放弃并获得更好的对比色(如果没有错误,则与您绘制的颜色不同)。

您可以为几种标准Windows配色方案中的每一种定义“警告”颜色(或多种颜色)(通过切换到这些方案中的每一种,定义满足您给定文本颜色和背景颜色的警告颜色)。如果用户恰好使用其中一种方案(或者至少如果背景颜色和文本颜色与您定义的背景/文本颜色组合之一匹配),则只需使用一种预定义的警告颜色。如果用户不是,请尝试通过将用户的背景颜色和文本颜色与预定义颜色进行比较来找到可能有效的颜色,并使用最匹配的颜色。如果没有好的匹配(即,根据某些标准,所有可能的预定义警告颜色都不是“易于阅读”),那么尝试从头开始计算可见但与您要替换的文本颜色不同的颜色。

您可以定义几种离散的警告颜色,您觉得这些颜色可以在某些颜色范围内轻松阅读。也许你定义了16种颜色。如果背景颜色属于ColorRange1,ColorC用于BackgroundColor2等,您可以选择使用Color1。我不知道您需要定义多少种颜色以确保您对所有可能的颜色组合都有“好”的选择。通过“手动”定义警告颜色,您可能有更好的机会获得相对“美观”的颜色,而不是在运行时尝试生成警告颜色。

如果您能够为给定的背景颜色(例如未选择)预定义单个警告颜色,则可以通过使用背景颜色之间的比率来为所选的聚焦和未聚焦情况插入相应的警告颜色 - 例如未选择与选定的聚焦 - 并将该比率(或相反)应用于“基础”警告颜色。

我并不是说这些建议中有很多(或任何一项)特别好。它们只是我在阅读和思考你的问题时所拥有的一些想法。

答案 2 :(得分:3)

可能一种新方法值得考虑。使用彩色图标,如Windows事件日志。保持所有文本的一致性,并使用彩色图标直观地区分不同类型的数据。