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

标签 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);
    }
}

当我试图找到带有某种笔触颜色的线条时,我找不到它。

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 的样子。

最佳答案

您在这里处理的是 ARGB 实体 - “alpha”、“red”、“green”和“blue”。如果您像在代码 ("#d7d7d7") 中那样仅指定 3 个元素,则转换器会隐式添加一个 255(最大强度)的 alpha channel 。

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

关于c# - 为什么 Line.Stroke.ToString() 返回 8 个符号的十六进制代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35307825/

相关文章:

c# - 从不同的项目读取 Properties.Settings.Default

c# - 委托(delegate)可以将泛型作为参数吗

c# - DateTime.AddMonths 仅添加月份而不是日期

c# - 在 C# 应用程序中使用现有的 C++ 代码

c# - 替代 Directory.CreateDirectory(path) 支持长路径

c# - 在 Sandbox 中使用 PayPal .NET SDK 验证 PayPal Webhook 调用

wpf - 如何绑定(bind)到 ControlTemplate 内的元素?

c# - 通过反射设置变量

c# - 比 DialogResult 包含更多信息的自定义 ShowDialog

wpf - DatePicker 内的自定义 WPF 日历