为什么Line.Stroke.ToString()返回8个符号的十六进制代码

时间:2016-02-10 05:52:39

标签: c# .net wpf canvas colors

我有一个将字符串十六进制代码转换为Brush对象

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

当我尝试使用某种颜色的笔划找到Line时,我找不到它。

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。

2 个答案:

答案 0 :(得分:7)

你正在处理一个ARGB实体 - 'alpha','red','green'和'blue'。如果您只在代码中指定了3个元素("#d7d7d7"),则转换器会隐式添加255通道(全强度)。

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

答案 1 :(得分:2)

前两个字母表示不透明,当然您可以更改它。

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