资源键可以是任何内容,因此您可以使用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
uses 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>
Edit:如果你有很多颜色、画笔等,你也可以使用反射在构造函数中注册资源(我使用字段,如果你使用属性来公开数据,你需要稍微调整一下):
static MyColors()
{
FieldInfo[] keyFieldInfoArray = typeof(MyColors).GetFields();
foreach (var keyFieldInfo in keyFieldInfoArray)
{
object value = keyFieldInfo.GetValue(null);
App.Current.Resources.Add(value, value);
}
}