2016-11-28 22 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

私はこのカスタムカラーを選択するときに問題があるが、テキストボックスではなく、色の名前(「カスタムの16進数値を表示します後ろ")、 私はこれを修正する方法はありますか?

+2

[ソースコード](http://wpftoolkit.codeplex.com/SourceControl/latest#Main/Source/ExtendedWPFToolkitSolution/Src/Xceed.Wpf.Toolkit/Core/Utilities/ColorUtilities.cs)によると、 nameは 'AvailableColors'の項目ではなく、拡張メソッド' ColorUtilities.GetColorName'によって決定されます。おそらく、ColorUtilities.KnownColorsに色を追加するとうまくいくかもしれません。 –

+0

@ManfredRadlwimmerあなたはこれを答えとして追加してください、私は同じことを受け入れるでしょう、これは動作します!、ソースコードをダウンロードしました!乾杯、 – Sandepku

答えて

1

私は上記の私のコメントで述べたように:名前はAvailableColorsのエントリが、拡張メソッドColorUtilities.GetColorNameによって決定されていないSource Codeによると

。多分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

関連する問題