繁体   English   中英

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

[英]How To Set Border Margin on a WPF DataGrid?

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

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

<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>

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

谢谢

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

就像是

<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>

视觉树看起来像这样

  • 数据网格行
    • 边界
      • 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM