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

eve*_*v92 3 .net c# wpf canvas colors

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

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

当我试图找到具有某种颜色的笔划的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

是不是扔我异常只是找不到.当我在列表中添加所有画笔时,我发现了一些我不知道为什么会这样做的东西.中风不是#D7D7D7.是#FFD7D7D7.

我的问题是:

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

Jen*_*cke 7

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

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