我的目标是将WPF项目中RadGridView中单元格的背景颜色格式化为基础数据中的值。这些数据是动态的,但我不能使用预定义的模板
我的基础表中有RGB值(尽管有空格而不是逗号,所以我使用转换器来修复它),在我有一个“颜色”列和模板的测试项目中,一切都很有效: / p>
<Window.Resources>
<local:StringToBrushConverter x:Key="lStringToBrushConverter"></local:StringToBrushConverter>
<DataTemplate x:Key="ColourCellTemplate">
<Border Name="lBorder" BorderThickness="3" Margin="1" CornerRadius="1" Width="100"
BorderBrush="{Binding Colour, Converter={StaticResource lStringToBrushConverter}}">
<TextBlock Background="{Binding ElementName=lBorder, Path=BorderBrush}" ></TextBlock>
</Border>
</DataTemplate>
</Window.Resources>
现在的问题是如何使用此模板在动态方案中使用。基本上我需要改变的是这部分中的“颜色”:
BorderBrush="{Binding Colour, Converter={StaticResource lStringToBrushConverter}}"
但我不确定如何在代码隐藏中实现这一点。我可以使用TryFindResource来获取DataTemplate,但更改Binding的下一步是我被困住的地方。
我查看了来自Telerik的this示例,该示例在将值与另一个值进行比较时在不同情况下有效,但它无法解决我的问题。
非常感谢..
答案 0 :(得分:0)
如果我从注释中正确理解了您的问题,您可以使用转换器绑定到整个对象(而不是某些特定属性,如Color),并在转换器中检查它的属性:
public class ColorColumnsConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (value == null || value == DependencyProperty.UnsetValue)
return null;
var folder = value as Folder; // some of your data types
if (folder != null) {
return folder.ColorProperty;
}
var jpegFile = value as JpegFile; // some another of your data types
if (jpegFile != null) {
return jpegFile.Colour;
}
// etc
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}