WPF颜色选择器 - 添加新的自定义颜色

时间:2016-11-28 12:34:46

标签: c# wpf color-picker

我尝试在WPF颜色选择器的可用颜色中添加新的自定义颜色。

背后的代码

this.colorPicker1.AvailableColors.Add(new ColorItem(Color.FromArgb(255, 153, 153, 187), "Custom"));

XAML

<exceedToolkit:ColorPicker Name="colorPicker1" DisplayColorAndName="True"/>

enter image description here

问题是,当我选择此自定义颜色时,文本框会显示十六进制值而不是颜色的名称(&#34; Custom&#34;), 我有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

正如我在上面的评论中提到的那样:

  

根据Source Code,该名称不是由AvailableColors中的条目确定的,而是由扩展方法ColorUtilities.GetColorName决定的。如果您将颜色添加到ColorUtilities.KnownColors,也许它会起作用。

一个(脏的)解决方法,直到开发人员解决这个问题,忽略 ColorUtilities类是私有的:

public static class ColorItemExtension
{
    public static bool Register(this ColorItem colorItem)
    {
        if (colorItem.Color == null) return false;

        Assembly assembly = typeof(ColorPicker).Assembly;
        Type colorUtilityType = assembly.GetType("Xceed.Wpf.Toolkit.Core.Utilities.ColorUtilities");
        if (colorUtilityType == null) return false;

        FieldInfo fieldInfo = colorUtilityType.GetField("KnownColors");
        if (fieldInfo == null) return false;

        Dictionary<string, Color> knownColors = fieldInfo.GetValue(null) as Dictionary<string, Color>;
        if (knownColors == null) return false;
        if (knownColors.ContainsKey(colorItem.Name)) return false;

        knownColors.Add(colorItem.Name, (Color) colorItem.Color);
        return true;
    }
}

可以像这样使用:

var colorItem = new ColorItem(Color.FromRgb(1, 2, 3), "Almost black");
colorItem.Register();
colorPicker1.AvailableColors.Add(colorItem);

如果这对您很重要,您可能需要考虑将此问题提请开发人员注意here