我正在尝试为我的业务实体中的不同状态设置静态资源。我的想法是,我可以使用值转换器来获取业务实体并根据算法返回相应的背景笔刷。我希望这些资源是静态的,因此我可以在设计器中对其进行设计,然后手动切换它们以预览开发期间的外观,但可以以编程方式使用它们。
目的是要遵循以下思路:
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,但是我不确定如何从那里导航层次结构。
最佳答案
诀窍是在创建所需的资源值时将其传递到转换器中。
例如,
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。您也可以定义完整的样式或模板。
希望能有所帮助。
关于silverlight - 使用ValueConverter返回StaticResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11778009/