【问题标题】:"System" color for warnings (red)警告的“系统”颜色(红色)
【发布时间】:2010-12-03 22:25:38
【问题描述】:

我想尽可能使用系统颜色。如何选择不包含在系统颜色中的颜色?

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

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

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

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

【问题讨论】:

  • 我以为警告是黄色的,错误是红色的?
  • @Nate 恐怕在白色背景上显示黄色文本比在红色文本上显示更难。 :) 我很少看到黄色用于警告。可能是因为它只能用于很少使用的深色背景。
  • 也许另一种方法会更好,请查看 Windows 事件日志以获取一个很好的示例。他们使用图标代替,更直观(恕我直言),因为所有文本都保持一致。
  • @Nate 你应该考虑添加图标的想法作为答案,我喜欢它。
  • 您经常以黑色显示警告/错误的文本,并且只使用黄色/红色框边框、背景颜色和/或图标。

标签: c# wpf windows user-interface colors


【解决方案1】:

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

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

如果您想要一个依赖于系统颜色的醒目颜色,您可以取所选项目的颜色并使其饱和一点,或者使其更红(例如,将其 RGB 红色分量设为 0xFF,这将取决于通过其他两个组件进行用户设置)。

【讨论】:

    【解决方案2】:

    我最接近遇到此类问题的是在一个项目中,我们实施了一些颜色处理,以确保 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 中单个项目的背景颜色)。

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

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

    您可以定义几种离散的警告颜色,您认为这些颜色在特定颜色范围内易于阅读。也许你定义了 16 种颜色。如果背景颜色在 ColorRange1 范围内,您可以选择使用 Color1,对于 BackgroundColor2,您可以选择使用 Color2。我不知道您必须定义多少种颜色才能确保您对所有可能的颜色组合都有一个“好的”选择。通过“手动”定义警告颜色,与尝试在运行时生成警告颜色相比,您可能更有机会获得相对“美观”的颜色。

    如果您能够为给定的背景颜色(例如未选择)预定义单一警告颜色,则可以使用背景颜色之间的比率为选定的重点和非重点案例插入相应的警告颜色 - 例如未选中与选中的焦点 - 并将该比率(或相反)应用于“基本”警告颜色。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 2015-07-14
        相关资源
        最近更新 更多