Доступ раскрашивает словарь ресурса от преобразователя значения

Я определил, несколько раскрашивают ResourceDictionary., например:

<ResourceDictionary ...>
  <Color x:Key=Gray1>#FFF7F1F3</Color>
  <Color x:Key=Gray2>#FFDDD8DA</Color>
</ResourceDictionary>

Таким образом, я могу снова использовать их везде в приложении.

Теперь я записал преобразователь значения для преобразования объектов внутреннее состояние в связанный цвет.

То, как я могу получить доступ к определенному, раскрашивает код преобразователя значения?

Моя первая мысль состояла в том, чтобы передать словарь как параметр преобразователя. Но я не знаю, как достигнуть этого.



С уважением

Править

Application.Current.Resources не опция. Поскольку у меня не будет доступа к нему позже.

17
задан DHN 13 July 2010 в 15:20
поделиться

1 ответ

Раздражающим моментом в использовании параметра конвертера является то, что вам приходится добавлять этот текст каждый раз, когда вы хотите использовать привязку.

Вместо этого вы можете сделать 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>
27
ответ дан 30 November 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: