2016-11-28 100 views
2

我想添加一個新的自定義顏色到WPF顏色選擇器的可用顏色。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

問題是,當我選擇這個自定義顏色,文本框中顯示的十六進制值,而不是顏色的名字(「自定義「), 有沒有辦法讓我解決這個問題?

+2

根據[源代碼](http://wpftoolkit.codeplex.com/SourceControl/latest#Main/Source/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Utilities/ColorUtilities.cs),名稱不是由'AvailableColors'中的條目決定的,而是由擴展方法'ColorUtilities.GetColorName'決定的。如果您也將顏色添加到ColorUtilities.KnownColors中,它可能會起作用。 –

+0

@ManfredRadlwimmer你可以請加這個作爲答案,我會接受相同的,這個作品!,下載源代碼!乾杯, – Sandepku

回答

1

正如我上面我的評論中提及:

按照Source Code名稱不被條目AvailableColors確定,但擴展方法ColorUtilities.GetColorName。如果您也將顏色添加到ColorUtilities.KnownColors,也許它會起作用。

A(髒)的解決方法,直至開發商解決這一問題將是忽略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