【问题标题】:How to get the ForeColor associated with the BackColor of the skin?如何获取与皮肤的 BackColor 关联的 ForeColor?
【发布时间】:2020-03-03 12:04:32
【问题描述】:

当您将SimpleButton.Appearance.BackColor 属性设置为DX Skin 颜色时(@Danger@Question@Success@Primary@Info 如图所示):

SimpleButton.Appearance.ForeColor 属性在运行时使用适当的颜色进行评估(如果肤色太深,将使用 Color.White;如果肤色太亮,将使用 Color.Black):

黑暗@Success:

@Success:

如何获得在运行时评估的 ForeColor

我尝试获取 SimpleButton.ForeColorSimpleButton.Appearance.ForeColorSimpleButton.Appearance.GetForeColor(e.GraphicsCache)(我试图在 CustomDraw 事件中获取此颜色)但它始终是 Color.Black

【问题讨论】:

    标签: c# winforms devexpress devexpress-windows-ui


    【解决方案1】:

    DevExpress.LookAndFeel.DXSkinColors.ForeColors.Information 属性应为信息/成功着色提供 ForeColor。

    【讨论】:

    • 你是对的——这是获取背景颜色。我的错,对不起。
    • 这也给了我绿色(与BackColor相同)!
    • 您使用的是 SVG 皮肤/调色板还是位图 GDI 皮肤?在我的测试中,前景色是一种绿色,只是比实际按钮颜色浅。
    • 我正在使用带有 SimpleButton ForeColor 设置为 Color.White 的叶锈托盘的 Beziere 皮肤(如问题所示),但最终用户可以更换托盘。因此,如果用户选择,例如,高对比度白色托盘,那么 SimpleButton ForeColor 将更改为 Color.Black。我想根据皮肤获得黑色或白色
    【解决方案2】:

    我最终根据this implementation of the W3C standard 使用了这种扩展方法,根据Miral 的测试做了一些modifications

    public static Color GetContrastColor(this Color color)
    {
        return (color.R * 0.299M) + (color.G * 0.587M) + (color.B * 0.114M) > 149 ? 
            Color.Black : 
            Color.White;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-09
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多