Я определил, несколько раскрашивают ResourceDictionary., например:
<ResourceDictionary ...>
<Color x:Key=Gray1>#FFF7F1F3</Color>
<Color x:Key=Gray2>#FFDDD8DA</Color>
</ResourceDictionary>
Таким образом, я могу снова использовать их везде в приложении.
Теперь я записал преобразователь значения для преобразования объектов внутреннее состояние в связанный цвет.
То, как я могу получить доступ к определенному, раскрашивает код преобразователя значения?
Моя первая мысль состояла в том, чтобы передать словарь как параметр преобразователя. Но я не знаю, как достигнуть этого.
С уважением
Править
Application.Current.Resources
не опция. Поскольку у меня не будет доступа к нему позже.
Раздражающим моментом в использовании параметра конвертера является то, что вам приходится добавлять этот текст каждый раз, когда вы хотите использовать привязку.
Вместо этого вы можете сделать 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();
}
}
инстанцировать и использовать конвертер:
<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>