使用ValueConverter返回StaticResource

Tri*_*tan 5 data-binding silverlight ivalueconverter

我正在尝试为我的业务实体中的不同状态设置静态资源.我的想法是,我可以使用值转换器来获取业务实体并根据算法返回相应的背景画笔.我希望资源是静态的,所以我可以在设计器中设计它们并手动切换它们以预览开发期间的样子,但是能够以编程方式使用它们.

目标是在这些方面有所作为:

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var data = value as DummyData;

        if (data == null)
            return null;

        //Find resources
        if (data.VarianceAmount >= 0)
            return StaticResources.HighBackground;
        else
            return StaticResources.LowBackground;
    }
Run Code Online (Sandbox Code Playgroud)

如果静态资源是在层次结构的页面/ control/framework元素中声明的,那么如何从值转换器中访问它?我已将我的值转换器设置为DependencyObject,但我不确定如何从那里导航层次结构.

Ser*_*ioL 10

诀窍是在创建时将所需的资源值传递给转换器.

例如,

  public class CustomColorConverter : IValueConverter
  {
     public SolidColorBrush HighBackground { get; set; }
     public SolidColorBrush LowBackground { get; set; }

     // remaining implementation...
  }
Run Code Online (Sandbox Code Playgroud)

然后在你的Xaml资源部分,你会声明它是这样的(当然使用你自己的资源):

<local:CustomColorConverter x:Key="BackgroundConverter" 
    HighBackground="{StaticResource HighlightBrush}" 
    LowBackground="{StaticResource NormalBrush}" />
Run Code Online (Sandbox Code Playgroud)

这具有可重复使用的优点.您可以使用新键创建另一个实例并定义不同的画笔.

此外,这可以适用于任何事情,而不仅仅是SolidColorBrushes; 您也可以定义完整的样式或模板.

希望有所帮助.