[英]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>
视觉树看起来像这样
当您更改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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.