如何为DataGridRow和上一个的BorderBrush着色

时间:2018-11-29 13:05:06

标签: .net wpf xaml

我创建了一个自定义控件,它继承自DataGrid。 当鼠标悬停时,我需要更改行的边框。容易。

除了如果我将BorderThick设置为0 1 0 1,底部和顶部边界堆栈看起来像在某些边界上有2个高度。 => enter image description here

为避免这种情况,我设置了0 0 0 1 BorderThick,现在它变得复杂了。 因为我需要更改上一行或下一行的BorderBrush。并为第一个边框添加一个矩形。

最后,我在自定义控件的MouseMove和MouseLeave事件中执行了此操作。它正在工作,但我感觉很脏:D

我请问是否有人对此有其他想法?最好是100%xaml。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将Border重叠。接下来的XAML的{​​{1}}中的BorderThickness1会与下一个重叠。但这不能完全解决问题,因为Margin="0,0,0,-1"不在前面,因此Row将设置为ZIndex

1

这看起来像这样:

Preview XAML

这需要进行微调,具体取决于<DataGrid ItemsSource="{Binding YOURSOURCE}" GridLinesVisibility="None"> <DataGrid.RowStyle> <Style TargetType="{x:Type DataGridRow}"> <!-- Line at the Top and Bottom --> <Setter Property="BorderThickness" Value="0,1,0,1"/> <!-- Idle Color --> <Setter Property="BorderBrush" Value="Black"/> <!-- Overlap Row with negative Margin --> <Setter Property="Margin" Value="0,0,0,-1"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <!-- Bring to Front and change Line-Color --> <Setter Property="Panel.ZIndex" Value="1" /> <Setter Property="BorderBrush" Value="Red"/> </Trigger> </Style.Triggers> </Style> </DataGrid.RowStyle> </DataGrid> ,但我希望您对这个概念有所了解。