从值转换器访问资源字典中的颜色

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)

  • 刚刚遇到这个 - 我也试图实现这个目标.此解决方案是否不为ResourceDictionary中的每个项创建新实例?或者WPF是否足够智能以识别它已经被加载,并且只使用一组值? (2认同)