如何在WPF DataGrid上设置边框边距?

时间:2011-08-11 20:19:22

标签: c# wpf xaml datagrid

我正在使用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>

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

由于

2 个答案:

答案 0 :(得分:3)

一种方法是将边框应用于每一行而不是脏一行,但将边框设置为透明,并将边框设置为红色,以实际显示为脏的行

这样的东西
<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>

答案 1 :(得分:2)

Visual Tree看起来像这样

  • DataGridRow
    • 边界
      • DataGridCellsPresenter

当您更改BorderThickness的{​​{1}}时,您可以通过同时向Border添加否定Margin.Left来补偿此问题。不是最漂亮的解决方案,但它有效

DataGridCellsPresenter