Я хочу расширить количество цветов в классе System.Windows.Media.Brushes
, поэтому я могу выполнить привязку с именем строки новой кисти.Как увеличить число кистей?
Нравится: value="myRed"
.
Я использую C#, .NET 4.5.2, VS2015, Windows 7.
Я хочу расширить количество цветов в классе System.Windows.Media.Brushes
, поэтому я могу выполнить привязку с именем строки новой кисти.Как увеличить число кистей?
Нравится: value="myRed"
.
Я использую C#, .NET 4.5.2, VS2015, Windows 7.
Это не возможно, потому что 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.
Я не хочу использовать конвертер. Я хочу иметь возможность использовать в нескольких файлах xaml и в файлах cs. – David
Так что вам нужно 'Extension Property' для' Sealed Class', которое находится в списке пожеланий C#? – GauravKP
Помимо того, что Майк объясняет в своем ответе, вам нужно будет не только расширить класс Brushes, но и код, который преобразуется из строки в Brush. Взгляд на исходный источник .NET (начиная с BrushConverter), наконец, приводит к внутреннему перечислению KnownColor и внутреннему классу KnownColors с гигантским вложенным оператором switch. – Clemens