【问题标题】:Why Line.Stroke.ToString() return 8 symbols hex code为什么 Line.Stroke.ToString() 返回 8 个符号的十六进制代码
【发布时间】:2016-05-20 08:51:55
【问题描述】:

我有类将字符串十六进制代码转换为画笔对象

public static class StringBrushConverter
{        
    public static Brush FromStringToBrushConvert(string hexCode)
    {
        var converter = new BrushConverter();
        return (Brush)converter.ConvertFromString(hexCode);
    }
}

当我尝试用某种颜色的笔触找到线条时,我找不到它。

foreach (System.Windows.Shapes.Line child in canvas.Children.OfType<System.Windows.Shapes.Line>())
{
    if (child.Stroke == StringBrushConverter.FromStringToBrushConvert("#d7d7d7"))
    {
        canvas.Children.Remove(child);
    }
}

不是抛出异常就是找不到。当我在列表中添加所有画笔时,当我不知道它为什么要制作时,我会发现一些东西。笔划不是#D7D7D7。是#FFD7D7D7。

我的问题是:

  1. 为什么 .Net 在我设置的十六进制代码之前添加 FF,就像 Line 中的中风一样。
  2. 这两个FF是什么意思。
  3. 可以将FF改成B3。

【问题讨论】:

    标签: c# .net wpf canvas colors


    【解决方案1】:

    您在这里处理的是 ARGB 实体 - 'alpha'、'red'、'green' 和 'blue'。如果您只指定 3 个元素,就像您在代码 ("#d7d7d7") 中所做的那样,转换器会隐式添加 255 的 alpha 通道(全强度)。

    当它转换回字符串时,它会在 ARGB 值的前面包含 'ff' (=255)。

    【讨论】:

      【解决方案2】:

      前两个字母表示不透明度,当然你可以改变它。

      此外,您的第二段代码是错误的,因为您试图比较对象的引用而不是值。尝试使用 object.Equals()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-16
        • 2017-03-27
        • 2015-12-06
        • 2011-07-02
        • 1970-01-01
        • 2014-08-07
        • 2021-08-31
        • 2019-01-01
        相关资源
        最近更新 更多