我尝试在WPF颜色选择器的可用颜色中添加新的自定义颜色。
背后的代码
this.colorPicker1.AvailableColors.Add(new ColorItem(Color.FromArgb(255, 153, 153, 187), "Custom"));
XAML
<exceedToolkit:ColorPicker Name="colorPicker1" DisplayColorAndName="True"/>
问题是,当我选择此自定义颜色时,文本框会显示十六进制值而不是颜色的名称(&#34; Custom&#34;), 我有办法解决这个问题吗?
答案 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