6

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

目标是有一些沿着这些方向的东西:

    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;
    }

如果静态资源在层次结构的页面/控件/框架元素中声明,我如何从值转换器内部访问它?我已将值转换器设置为 DependencyObject,但我不确定如何从那里导航层次结构。

4

1 回答 1

12

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

例如,

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

     // remaining implementation...
  }

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

<local:CustomColorConverter x:Key="BackgroundConverter" 
    HighBackground="{StaticResource HighlightBrush}" 
    LowBackground="{StaticResource NormalBrush}" />

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

此外,这几乎适用于任何东西,而不仅仅是 SolidColorBrushes;您也可以定义完整的样式或模板。

希望有帮助。

于 2012-08-02T14:09:57.047 回答