DHN*_*DHN 17 c# silverlight wpf
我在ResourceDictionary中定义了几种颜色.例如:
<ResourceDictionary ...>
<Color x:Key=Gray1>#FFF7F1F3</Color>
<Color x:Key=Gray2>#FFDDD8DA</Color>
</ResourceDictionary>Run Code Online (Sandbox Code Playgroud)
所以我可以在应用程序的各处重用它们.
现在我写了一个值转换器来将项目内部状态转换为相关颜色.
如何在值转换器的代码中访问定义的颜色?
我的第一个想法是将字典作为转换器参数传递.但我不知道如何实现这一目标.
问候
编辑
Application.Current.Resources不是一种选择.因为我以后无法访问它.
vig*_*ity 27
使用转换器参数的烦人之处在于,每次要使用绑定时都必须添加该文本.
相反,您可以将ResourceDictionary设置为转换器上的属性,并在实例化转换器时进行设置.
转换器代码:
public class SomeConverter : IValueConverter
{
private ResourceDictionary _resourceDictionary;
public ResourceDictionary ResourceDictionary
{
get { return _resourceDictionary; }
set
{
_resourceDictionary = value;
}
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
//do your own thing using the _dict
//var person = value as Person
//if (person.Status == "Awesome")
// return _resourceDictionary["AwesomeBrush"]
//else
// return _resourceDictionary["NotAwesomeBrush"];
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
实例化并使用转换器:
<Window.Resources>
<local:SomeConverter x:Key="MyConverter" >
<local:SomeConverter.ResourceDictionary>
<ResourceDictionary Source="SomeRandomResourceDictionary.xaml" />
</local:SomeConverter.ResourceDictionary>
</local:SomeConverter>
</Window.Resources>
...
<StackPanel Background="{Binding CurrentPerson, Converter={StaticResource MyConverter}}" >
</StackPanel>
Run Code Online (Sandbox Code Playgroud)