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

如何实现DataGridTextColumn为空时显示红色边框?

实现DataGridTextColumn文本为空时显示红色边框

针对你的需求,有两种可行的实现方式,分别适用于不同场景:

方案一:给整个DataGridCell添加红色边框(推荐)

直接通过DataTrigger绑定数据源的目标属性,当属性值为空或null时,设置DataGridCell的边框样式:

<DataGridTextColumn Header="MyValue" Binding="{Binding MyValue, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <!-- 匹配空字符串的情况 -->
                <DataTrigger Binding="{Binding MyValue}" Value="">
                    <Setter Property="BorderBrush" Value="Red"/>
                    <Setter Property="BorderThickness" Value="1"/>
                </DataTrigger>
                <!-- 可选:匹配null值的情况 -->
                <DataTrigger Binding="{Binding MyValue}" Value="{x:Null}">
                    <Setter Property="BorderBrush" Value="Red"/>
                    <Setter Property="BorderThickness" Value="1"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

这种方式的边框覆盖整个单元格区域,视觉上更统一,适合需要标记整个单元格的场景。

方案二:给文本区域添加红色边框

如果只需要给文本内容周围添加边框,可以修改DataGridTextColumn的ElementStyle,给TextBlock自定义模板并嵌入Border,通过TextBlock的Text属性触发边框样式:

<DataGridTextColumn Header="MyValue" Binding="{Binding MyValue, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="TextBlock">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TextBlock">
                        <Border x:Name="cellBorder" BorderThickness="0">
                            <ContentPresenter/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="Text" Value="">
                                <Setter TargetName="cellBorder" Property="BorderBrush" Value="Red"/>
                                <Setter TargetName="cellBorder" Property="BorderThickness" Value="1"/>
                            </Trigger>
                            <Trigger Property="Text" Value="{x:Null}">
                                <Setter TargetName="cellBorder" Property="BorderBrush" Value="Red"/>
                                <Setter TargetName="cellBorder" Property="BorderThickness" Value="1"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

这种方式的边框仅围绕文本内容,适合需要精准标记文本区域的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:38:09