You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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>

关键说明:

  1. RowStyle直接作用于FlexGrid的每一行,目标类型为c1:Row,绑定的IsEditing.Value自动继承当前行的数据上下文,无需额外指定数据源。
  2. 通过Trigger顺序控制样式优先级:先定义编辑状态的背景色,再定义选中行的样式,确保选中状态的视觉优先级更高。
  3. 背景色可根据需求自定义,替换为符合业务场景的标识色即可。

内容的提问来源于stack exchange,提问作者dellos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 05:22:48