Палитра цветов WPF - добавление нового пользовательского цвета
Я пытаюсь добавить новый пользовательский цвет в доступные цвета палитры цветов WPF.
Код позади
this.colorPicker1.AvailableColors.Add(new ColorItem(Color.FromArgb(255, 153, 153, 187), "Custom"));
XAML
<exceedToolkit:ColorPicker Name="colorPicker1" DisplayColorAndName="True"/>
Проблема в том, что когда я выбираю этот пользовательский цвет, в текстовом поле отображается шестнадцатеричное значение вместо имени цвета ("Пользовательский"), есть ли способ исправить это?
1 ответ
Как я уже упоминал в моем комментарии выше:
Согласно Исходному коду имя не определяется записями в
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);
Если это важно для вас, возможно, вы захотите обратить внимание разработчиков на эту проблему здесь.