我创建了一个自定义控件,它继承自DataGrid。 当鼠标悬停时,我需要更改行的边框。容易。
除了如果我将BorderThick设置为0 1 0 1,底部和顶部边界堆栈看起来像在某些边界上有2个高度。 =>
为避免这种情况,我设置了0 0 0 1 BorderThick,现在它变得复杂了。 因为我需要更改上一行或下一行的BorderBrush。并为第一个边框添加一个矩形。
最后,我在自定义控件的MouseMove和MouseLeave事件中执行了此操作。它正在工作,但我感觉很脏:D
我请问是否有人对此有其他想法?最好是100%xaml。
谢谢!
答案 0 :(得分:1)
您可以将Border
重叠。接下来的XAML
的{{1}}中的BorderThickness
和1
会与下一个重叠。但这不能完全解决问题,因为Margin="0,0,0,-1"
不在前面,因此Row
将设置为ZIndex
。
1
这看起来像这样:
这需要进行微调,具体取决于<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>
,但我希望您对这个概念有所了解。