Ключи ресурсов могут быть любыми, поэтому вы можете использовать Color
в качестве ключа и значения одновременно:
public static class MyColors
{
static MyColors()
{
App.Current.Resources.Add(MyHighlightColorKey, MyHighlightColorKey);
}
public static readonly Color MyHighlightColorKey = Color.FromArgb(255, 0, 88, 0);
}
Статический конструктор добавляет цвет, используя себя в качестве ключа к ресурсам приложения.
(SystemColors
использует SystemResourceKeys
внутренне для каждого определенного цвета или кисти, однако у вас нет доступа к этому классу (что имеет смысл), или же вы можете создать подкласс ResourceKey
, если у вас возникнут проблемы с использованием значение как собственный ключ )
Вы можете использовать это так:
<TextBox>
<TextBox.Background>
<SolidColorBrush Color="{DynamicResource {x:Static local:MyColors.MyHighlightColorKey}}"/>
</TextBox.Background>
</TextBox>
И если вам нужно переопределить ключ на локальном уровне, вы также можете сделать это:
<Window.Resources>
<Color x:Key="{x:Static local:MyColors.MyHighlightColorKey}" A="255" R="255" G="0" B="0"/>
</Window.Resources>
Редактировать: Если у вас много цветов, кистей и тому подобного, вы также можете использовать отражение для регистрации ресурса в конструкторе (я использовал поля, если вы используете свойства для предоставления данных, которые вам нужны отрегулируйте это немного):
static MyColors()
{
FieldInfo[] keyFieldInfoArray = typeof(MyColors).GetFields();
foreach (var keyFieldInfo in keyFieldInfoArray)
{
object value = keyFieldInfo.GetValue(null);
App.Current.Resources.Add(value, value);
}
}