C# WPF 根据数据更改 DataGrid 行(背景)颜色

C# WPF change DataGrid row (background) color based on the data

我有 Datagrid 视图,如下所示: 选择的是“状态”,它有 3 种值(付费、未付费和其他)。 我想根据状态制作每行的背景,如果它是未付款的颜色是红色,如果它的付费颜色是绿色,而在其他选项中它是白色或没有颜色。 我从 mysql 数据库接收数据。 我的数据网格 XML 代码:

<DataGrid HorizontalAlignment="Right" Height="178" FontWeight="Bold" Margin="0,193,63,0" VerticalAlignment="Top" Width="1087"  x:Name="FactorGrid" ItemsSource="{Binding LoadDataBinding}" CanUserResizeRows="False"  AutoGenerateColumns="False" CanUserAddRows="False" ContextMenuOpening="FactorGrid_ContextMenuOpening">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding id}" Header="شماره صورتحساب" Width="110" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding factorgroup}" Header="گروه" Width="100" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding factortype}" Header="نوع" Width="100" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding amount}" Header="مبلغ" Width="80" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding discount}" Header="تخفیف" Width="80" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding extra}" Header="جریمه" Width="80" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding created_at, ConverterCulture=fa-IR, StringFormat=yyyy/MM/dd}" Header="تاریخ ایجاد" Width="150" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding parent_id}" Header="شماره صورتحساب اصلی" Width="150" IsReadOnly="True" />
            <DataGridTextColumn Binding="{Binding status}"  Header="وضعیت" Width="150" IsReadOnly="True" />

        </DataGrid.Columns>
        <DataGrid.ContextMenu>
            <ContextMenu>
                <MenuItem Header="پرداخت شده" Click="BtnSetPaid">
                    <MenuItem.Icon>
                        <Image Width="12" Height="12" Source="img/yes.png"/>
                    </MenuItem.Icon>
                </MenuItem>
                <MenuItem Header="پرداخت صورتحساب" Click="BtnAddNewpay_Click">
                    <MenuItem.Icon>
                        <Image Width="12" Height="12" Source="img/9999.png"/>
                    </MenuItem.Icon>
                </MenuItem>
                <MenuItem Header="حذف" Click="BtnFactorDell">
                    <MenuItem.Icon>
                        <Image Width="12" Height="12" Source="img/delete.png"/>
                    </MenuItem.Icon>
                </MenuItem>
                <MenuItem Header="قسط بندی" Click="BtnFactorSplit">
                    <MenuItem.Icon>
                        <Image Width="12" Height="12" Source="img/ab-report.png"/>
                    </MenuItem.Icon>
                </MenuItem>
                <MenuItem Header="ویرایش" Click="BtnFactorEdit">
                    <MenuItem.Icon>
                        <Image Width="12" Height="12" Source="img/Edit.png"/>
                    </MenuItem.Icon>
                </MenuItem>
            </ContextMenu>
        </DataGrid.ContextMenu>
    </DataGrid>

和我的 cs 代码:

MySqlCommand cmd3 = new MySqlCommand("SELECT query ", conn);
                        MySqlDataAdapter adp2 = new MySqlDataAdapter(cmd3);
                        DataSet ds2 = new DataSet();
                        adp2.Fill(ds2, "LoadDataBinding");
                        FactorGrid.DataContext = ds2;

有什么办法可以做我想做的事吗?抱歉我的英语不好。

查看 DataTriggers。它们可以帮助您绑定到一个值,并根据不同的值做不同的事情。您通常会在 和 之间添加它。更改颜色 RGB 以适合。

<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
        <Style.Triggers>
                <DataTrigger Binding="{Binding Status}" Value="Paid">
                        <Setter Property="Background" Value="#447cff8b"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Status}" Value="Unpaid">
                        <Setter Property="Background" Value="#444eafff"></Setter>
                    </DataTrigger>
             </Style.Triggers>
</Style>
</DataGrid.RowStyle>

如果不满足其他条件,在您进一步提问(在评论中)关于 默认值 值之后,您只需再添加一行:

<Setter Property="Background" Value="#4400ffff"></Setter>

这超出了这样的样式触发器(第 3 行):

<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
    <Setter Property="Background" Value="#4400ffff"></Setter>
        <Style.Triggers>
                <DataTrigger Binding="{Binding Status}" Value="Paid">
                        <Setter Property="Background" Value="#447cff8b"></Setter>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Status}" Value="Unpaid">
                        <Setter Property="Background" Value="#444eafff"></Setter>
                    </DataTrigger>
        </Style.Triggers>
</Style>
</DataGrid.RowStyle> 

这样一来,如果触发了其中一个触发器,它将使用触发器的颜色,否则将使用默认值(上面的第 3 行)。