2016-10-05 2 views
2

Я хочу расширить количество цветов в классе System.Windows.Media.Brushes, поэтому я могу выполнить привязку с именем строки новой кисти.Как увеличить число кистей?

Нравится: value="myRed".

Я использую C#, .NET 4.5.2, VS2015, Windows 7.

+0

Я не хочу использовать конвертер. Я хочу иметь возможность использовать в нескольких файлах xaml и в файлах cs. – David

+0

Так что вам нужно 'Extension Property' для' Sealed Class', которое находится в списке пожеланий C#? – GauravKP

+0

Помимо того, что Майк объясняет в своем ответе, вам нужно будет не только расширить класс Brushes, но и код, который преобразуется из строки в Brush. Взгляд на исходный источник .NET (начиная с BrushConverter), наконец, приводит к внутреннему перечислению KnownColor и внутреннему классу KnownColors с гигантским вложенным оператором switch. – Clemens

ответ

3

Это не возможно, потому что System.Drawing.Brushes класс sealed. Это означает, что он не может быть унаследован и, следовательно, не может быть расширен.

Вы гораздо лучше создать Resource Dictionary, который содержит ваши цвета:

<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, потому что есть четкий разрыв между тем, что ваш код, и что такое код . NET. Мало того, что ваши цвета в ресурсном словаре способствуют повторному использованию в проектах, а ресурсы могут быть легко расширены и станут более адаптивными к изменяющимся требованиям.

Подробнее о ресурсных словарях можно узнать в documentation.

Смежные вопросы