C# 设置数据网格单元格背景颜色wpf

C# 设置数据网格单元格背景颜色wpf,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个DataGrid,它的单元格背景颜色必须是两种 灰色,如果单元格没有值 如果单元格有任何值,则为白色(默认值) 我写了下面的代码来实现这个功能,但它不起作用 <UserControl.Resources> <Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}"> <Style.Triggers> <Trigger Pro

我有一个
DataGrid
,它的单元格背景颜色必须是两种

  • 灰色,如果单元格没有值
  • 如果单元格有任何值,则为白色(默认值)
  • 我写了下面的代码来实现这个功能,但它不起作用

    <UserControl.Resources>
        <Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <Trigger Property="HasContent" Value="False">
                    <Setter Property="Background" Value="Gray"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </UserControl.Resources>
    
    <DataGrid CellStyle="{StaticResource DataGridCellStyle}">
    
    
    

    有人能解释一下原因吗?

    这是因为
    DataGridCell
    内容是
    TextBlock
    (或者单元格编辑时是
    TextBox
    )。因此,即使一个空单元格也包含一个空的
    TextBlock
    TextBox
    ),即
    HasContent
    属性永远不会变为
    false

    如果不在单元格中使用自定义模板,则此操作应有效:

    <Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Content.Text, RelativeSource={RelativeSource Self}}"  Value="" >
                <Setter Property="Background" Value="Gray"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    
    
    
    因为
    DataGridCell
    内容是
    TextBlock
    (或者单元格编辑时是
    TextBox
    )。因此,即使一个空单元格也包含一个空的
    TextBlock
    TextBox
    ),即
    HasContent
    属性永远不会变为
    false

    如果不在单元格中使用自定义模板,则此操作应有效:

    <Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Content.Text, RelativeSource={RelativeSource Self}}"  Value="" >
                <Setter Property="Background" Value="Gray"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
    
    
    
    是否已将背景本地值设置为
    白色
    ?不需要此选项…默认值仅为白色。编辑评论!!是否已将背景本地值设置为
    白色
    ?不需要…默认值仅为白色。编辑评论!!那么如何实现上面提到的功能呢?@user1603970我相信
    DataTrigger
    +
    IValueConverter
    可以做到,但不能肯定。“我现在正在处理比现在更多的问题。@user1603970已解决。”
    IValueConverter
    是不需要的。那么如何实现上面提到的功能呢?@user1603970我相信
    DataTrigger
    +
    IValueConverter
    可以做到,但不确定。“我现在正在处理比现在更多的问题。@user1603970已解决。”<不需要代码>IValueConverter