如何在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>
我可以添加什么,以便我可以修改红色边框的边距,使其不会干扰单元格的边框?
谢谢
一种方法是将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
- 边界
当你改变Border
的BorderThickness
时,你可以通过同时向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>