我正在尝试为我的业务实体中的不同状态设置静态资源。我的想法是,我可以使用值转换器来获取业务实体并根据算法返回相应的背景画笔。我希望资源是静态的,所以我可以在设计器中设计它们并手动切换它们以预览开发过程中的样子,但是能够以编程方式使用它们。
目标是在这些方面有所作为:
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;
}
如果在层次结构的页面/ control / framework元素中声明了静态资源,我该如何从值转换器中访问它?我已将我的值转换器设置为DependencyObject,但我不确定如何从那里导航层次结构。
答案 0 :(得分:10)
技巧是在创建时将所需的资源值传递给转换器。
例如,
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;您也可以定义完整的样式或模板。
希望有所帮助。