基于值的WPF数据表格行颜色

3
我想根据布尔值更改DataGrid的行颜色。我查看了https://dev59.com/anbZa4cB1Zd3GeqPFWQA,并以类似的方式尝试了它(在本地定义样式而不是在用户控件的资源中定义),但当editable属性更改时,行背景不会改变。我不知道哪里出了问题,很高兴有一些新的尝试。
<DataGrid ItemsSource="{Binding ReportSampleExaminationList}" CanUserDeleteRows="False" PreviewKeyDown="deleteRow" AutoGenerateColumns="False" HorizontalAlignment="Stretch" 
            RowBackground="Wheat" AlternatingRowBackground="WhiteSmoke" VerticalGridLinesBrush="Transparent"  HorizontalGridLinesBrush="Gray">

    <DataGrid.CellStyle >
        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <Trigger Property="IsSelected"
                    Value="True">
                    <Setter Property="Background"
                    Value="LightBlue" />
                    <Setter Property="Foreground"
                    Value="Black" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.CellStyle>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Editable}" Value="False">
                    <Setter Property="Background" Value="Red" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>

    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="Editable" Binding="{Binding Editable}"/>
        <DataGridTextColumn Header="Probe" Binding="{Binding SampleNumber}" IsReadOnly="True" />
    </DataGrid.Columns>

</DataGrid>
1个回答

5
如果从DataGrid中删除RowBackground和AlternatingRowBackground,则可以正常工作。如果想使用它们,您需要将它们放入DataGrid的样式中。
<DataGrid ItemsSource="{Binding ReportSampleExaminationList}" CanUserDeleteRows="False" PreviewKeyDown="deleteRow" AutoGenerateColumns="False" HorizontalAlignment="Stretch" 
            VerticalGridLinesBrush="Transparent"  HorizontalGridLinesBrush="Gray">
            <DataGrid.Style>
                <Style TargetType="DataGrid">
                    <Setter Property="RowBackground" Value="Wheat" />
                    <Setter Property="AlternatingRowBackground" Value="WhiteSmoke" />
                </Style>
            </DataGrid.Style>
            <DataGrid.CellStyle >
                <Style TargetType="DataGridCell">
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Background" Value="LightBlue" />
                            <Setter Property="Foreground" Value="Black" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.CellStyle>
            <DataGrid.RowStyle>
                <Style TargetType="DataGridRow">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Editable}" Value="False">
                            <Setter Property="Background" Value="Red" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.RowStyle>

            <DataGrid.Columns>
                <DataGridCheckBoxColumn Header="Editable" Binding="{Binding Editable,UpdateSourceTrigger=PropertyChanged}"/>
                <DataGridTextColumn Header="Probe" Binding="{Binding SampleNumber}" IsReadOnly="True" />
            </DataGrid.Columns>
</DataGrid>

谢谢,非常完美。我不知道如果在控件的定义中设置了这些属性,就不能覆盖它们。 - causa prima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接