我正在尝试为我的业务实体中的不同状态设置静态资源。我的想法是,我可以使用一个值转换器来获取业务实体,并根据算法返回相应的背景画笔。我希望资源是静态的,这样我就可以在设计器中设计它们,并手动切换它们,以便在开发过程中预览它的外观,但能够以编程方式使用它们。
我们的目标是做一些类似这样的事情:
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;
}如果静态资源是在层次结构中的page / control / framework元素中声明的,我如何从值转换器内部访问它?我已经将值转换器设置为DependencyObject,但我不确定如何从那里导航层次结构。
发布于 2012-08-02 22:09:57
诀窍是在创建时将所需的资源值传递给转换器。
例如,
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}" />这具有可重用的优点。您可以使用新的key创建另一个实例,并定义不同的笔刷。
此外,这几乎可以适用于任何东西,而不仅仅是SolidColorBrushes;您还可以定义完整的样式或模板。
希望这能有所帮助。
https://stackoverflow.com/questions/11778009
复制相似问题