如何在WPF数据网格上设置边界距

本文关键字:设置 边界 网格 数据网 WPF 数据 | 更新日期: 2023-09-27 18:05:11

我正在使用WPF DataGrid,并将其设置为在用户修改的任何行周围放置红色边框。它工作得很好,但是当边界出现时,该行内的所有单元格都被推过一两个像素。换句话说,一个细胞的左右边界不再与它的上下边界对齐,所以看起来很奇怪。

这是我用来让红色边框出现OnEdit的代码(注意:IsDirty是我的绑定对象的属性,当一个值被修改时设置):

<Style TargetType="DataGridRow">
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsDirty}" Value="true">
            <Setter Property="BorderBrush" Value="Red" />
            <Setter Property="BorderThickness" Value="1" />                    
        </DataTrigger>
    </Style.Triggers>
</Style>

我可以添加什么,以便我可以修改红色边框的边距,使其不会干扰单元格的边框?

谢谢

如何在WPF数据网格上设置边界距

一种方法是将border应用于每一行而不是dirty行但是将border设置为transparent并将dirty行设置为红色

之类的
<Style TargetType="DataGridRow">
    <Setter Property="BorderBrush" Value="Transparent" />
    <Setter Property="BorderThickness" Value="1" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding IsDirty}" Value="true">
            <Setter Property="BorderBrush" Value="Red" />
        </DataTrigger>
    </Style.Triggers>
</Style>

可视化树看起来像这样

  • DataGridRow
    • 边界
      • DataGridCellsPresenter

当你改变BorderBorderThickness时,你可以通过同时向DataGridCellsPresenter添加负的Margin.Left来补偿这一点。不是最漂亮的解决方案,但它有效

<DataGrid ...>
    <DataGrid.Resources>
        <Style TargetType="DataGridCellsPresenter">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsDirty}" Value="true">
                    <Setter Property="Margin" Value="-1,0,0,0" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.Resources>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsDirty}" Value="true">
                    <Setter Property="BorderBrush" Value="Red" />
                    <Setter Property="BorderThickness" Value="1" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
    <!--...-->
</DataGrid>