回复 6楼q406157290的帖子
除了LoadedCellPresenter这种方式,还有一种Converter的方法。
对Row.Backgroud,自己通过Conveter来设置背景色,在Converter里根据需求条件更改颜色。
我不清楚你的业务逻辑,无法按照你的业务做示例。但我可以提供Converter的基本思路。如果符合你的业务需求,你可以按照这个思路去实现。
基本步骤:
1.C1DataGrid设置RowStyle:
- <c1:C1DataGrid x:Name="grid" RowStyle="{StaticResource rowstyle}"/>
复制代码
2.继承IValueConverter接口,在Convert方法里判断某种条件下设置背景色。
比如:
- public class MyConverter : IValueConverter
- {
- public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
- {
- var p = value as Product; // typecast the data item here
- if (p != null)
- {
- if (p.Available == true)
- {
- return new SolidColorBrush(Colors.Yellow);
- }
- else return new SolidColorBrush(Colors.White);
- }
- return new SolidColorBrush(Colors.White);
- }
- public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
- {
- return null;
- }
- }
复制代码
3.在XAML里,重写Style,类型为DataGridRowPresenter。
- <local:MyConverter x:Key="converter"/>
- <Style x:Key="rowstyle" TargetType="c1:DataGridRowPresenter">
- <Setter Property="BorderThickness" Value="0"/>
- <Setter Property="Template">
- <Setter.Value>
- <ControlTemplate TargetType="c1:DataGridRowPresenter" >
- //在这里重写Template,下面这句代码是参考的。
- <Border x:Name="BackgroundElement" Background="{Binding Path=Row.DataItem,RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource converter}}" />
- </ControlTemplate>
- </Setter.Value>
- </Setter>
- </Style>
复制代码 |