2016-10-05 12 views
2

System.Windows.Media.Brushesクラスの色数を増やしたいので、新しいBrushの文字列名でバインドできます。ブラシの数を伸ばす方法は?

Like:value="myRed"

私はSystem.Drawing.Brushesクラスがsealedあるので、これは可能ではないのC#、.NET 4.5.2、VS2015、Windows 7の

+0

私はコンバータを使いたくないです。私は複数のxamlファイルとcsファイルで使用できるようにしたい。 – David

+0

だから、基本的に、 'Sealed Class'の' Extension Property'が必要です。これはC#wish listにありますか? – GauravKP

+0

マイク氏の答えに加えて、Brushesクラスを拡張するだけでなく、stringからBrushに変換するコードも拡張する必要があります。 .NETリファレンスソース(BrushConverterから始まる)を見てみると、最終的に内部enum KnownColorと内部クラスKnownColorsに巨大なネストされたswitch文があります。 – Clemens

答えて

3

を使用しています。つまり、継承できないため拡張できません。

あなたの色が含まれていリソース辞書作成オフはるかに良いです:

<ResourceDictionary ... > 

    <!-- Declare your colours here. --> 
    <SolidColorBrush x:Key="MyColour">#ffffff</SolidColorBrush> 

</ResourceDictionary> 

をしてからApp.xamlで辞書ことを含める:

<Application ... > 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <!-- You may need to include more than one resource dictionary. --> 
       <ResourceDictionary Source="pack://application:,,,/Your.Project;component/Path/To/Dictionary.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

あなたがでそれらのリソースを取得することができますこのようなコードビハインド:

Brush myColour = (Brush)Application.Current.FindResource("MyColour"); 

私の意見では、これは、のコードと、というコードが明確に分かれているため、これは既存のBrushesクラスを拡張するよりはるかに良い方法です。それだけでなく、リソース・ディクショナリに色をつけておくと、プロジェクト全体での再利用が促進され、リソースは簡単に拡張され、要件の変更に適応しやすくなります。

documentationにリソース辞書の詳細があります。

関連する問題