wpf 如果文本为空,则为Datagridtextcolumn边框

zazmityj  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(167)

我有一个带有DataGridTextColumn的DataGrid。如果该列的文本为空,我希望显示红色边框。
如果我使用DataGridCell作为Style的TargetType,我可以设置边框的属性。但是DataGridCell没有可以用来触发样式的text属性。我也尝试使用Content,但此属性也不存在:

<DataGridTextColumn Header="MyValue" Binding="{Binding MyValue, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="DataGridCell">
            <Style.Triggers>
                <Trigger Property="???" Value="">
                    <Setter Property="BorderBrush" Value="Red"/>
                    <Setter Property="BorderThickness" Value="1 1 1 1"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

如果我使用TextBlock作为样式的TargetType,我可以使用属性文本来触发样式。但是TextBlock没有用于边框的属性来设置边框样式:

<DataGridTextColumn Header="MyValue" Binding="{Binding MyValue, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False">
    <DataGridTextColumn.CellStyle>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <Trigger Property="Text" Value="">
                    <Setter Property="???" Value="Red"/>
                    <Setter Property="???" Value="1 1 1 1"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.CellStyle>
</DataGridTextColumn>

如果datagridtextcolumn是空的,我如何获得红色边框?

0dxa2lsx

0dxa2lsx1#

如果希望在DataGridTextColumn的文本为空时显示红色边框,可以使用CellTemplate并使用Datatrigger作为Border并将其绑定到文本。您的XAML代码已更新:

<DataGrid ItemsSource="{Binding Path=MyProperty}" AutoGenerateColumns="False" CanUserAddRows="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="MyValue" IsReadOnly="False">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Border BorderThickness="2">
                            <TextBox x:Name="MyText" Text="{Binding MyValue, UpdateSourceTrigger=PropertyChanged}"/>
                            <Border.Style>
                                <Style TargetType="Border">
                                    <Setter Property="BorderBrush" Value="Transparent"/>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding  ElementName=MyText, Path=Text}"  Value="">
                                            <Setter Property="BorderBrush" Value="Red"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Border.Style>
                        </Border>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGridTextColumn>
    </DataGrid.Columns>
vdgimpew

vdgimpew2#

若要在DataGridTextColumn的文本为空时实现所需的显示红色边框的行为,可以使用DataTrigger并将其绑定到DataGridCell样式内TextBlock的Text属性。下面是XAML代码的更新版本:

<DataGridTextColumn Header="MyValue" Binding="{Binding MyValue, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="False">
<DataGridTextColumn.CellStyle>
    <Style TargetType="DataGridCell">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="DataGridCell">
                    <Grid>
                        <Border x:Name="Border"
                                BorderBrush="{TemplateBinding BorderBrush}"
                                BorderThickness="{TemplateBinding BorderThickness}"
                                Background="{TemplateBinding Background}"
                                SnapsToDevicePixels="True">
                            <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding Text, RelativeSource={RelativeSource AncestorType={x:Type TextBlock}}}" Value="">
                            <Setter TargetName="Border" Property="BorderBrush" Value="Red"/>
                            <Setter TargetName="Border" Property="BorderThickness" Value="1"/>
                        </DataTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</DataGridTextColumn.CellStyle>

相关问题