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

本文关键字:符号 十六进制 代码 返回 Stroke Line ToString 为什么 | 更新日期: 2023-09-27 18:33:55

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

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一样。

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

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

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

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

此外,你的第二段代码是错误的,因为你试图与对象的引用而不是值进行比较。尝试使用对象。等于()。