.NET 8下WPF的C1FlexGrid如何根据数据自定义行颜色
实现C1FlexGrid根据行数据设置整行背景色(WPF + .NET 8 + MVVM)
可以通过给C1FlexGrid设置RowStyle,结合DataTrigger绑定行数据的IsEditing.Value属性来实现整行背景色切换,不需要单独处理每个单元格。
修改后的完整XAML代码如下:
<c1:FlexGrid x:Name="QuotationHeaderList" AutoGenerateColumns="False" IsReadOnly="True" ItemsSource="{Binding QuotationHeaderList}" MinRowHeight="50" SelectionMode="Row" VerticalScrollBarVisibility="Auto"> <!-- 新增整行样式配置 --> <c1:FlexGrid.RowStyle> <Style TargetType="c1:Row"> <Setter Property="Background" Value="Transparent"/> <Style.Triggers> <!-- 根据行数据的IsEditing.Value切换背景色 --> <DataTrigger Binding="{Binding IsEditing.Value}" Value="True"> <Setter Property="Background" Value="#FFF5D7D7"/> <!-- 自定义编辑状态背景色 --> </DataTrigger> <!-- 保留选中行的默认样式优先级 --> <Trigger Property="IsSelected" Value="True"> <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> </Trigger> </Style.Triggers> </Style> </c1:FlexGrid.RowStyle> <c1:FlexGrid.Columns> <c1:GridColumn Width="80"> <c1:GridColumn.CellTemplate> <DataTemplate> <Button Content="編集" Margin="5 0" Command="{Binding DataContext.EditRowCmd,Source={x:Reference QuotationHeaderList}}" CommandParameter="{Binding .}"> <Button.Style> <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> <Style.Triggers> <DataTrigger Binding="{Binding IsEditing.Value,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Value="True"> <Setter Property="Background" Value="Red" /> </DataTrigger> </Style.Triggers> </Style> </Button.Style> </Button> </DataTemplate> </c1:GridColumn.CellTemplate> </c1:GridColumn> ... </c1:FlexGrid.Columns> </c1:FlexGrid>
关键说明:
RowStyle直接作用于FlexGrid的每一行,目标类型为c1:Row,绑定的IsEditing.Value自动继承当前行的数据上下文,无需额外指定数据源。- 通过Trigger顺序控制样式优先级:先定义编辑状态的背景色,再定义选中行的样式,确保选中状态的视觉优先级更高。
- 背景色可根据需求自定义,替换为符合业务场景的标识色即可。
内容的提问来源于stack exchange,提问作者dellos
相关产品推荐
相关产品推荐

