.net 如何为DataGridRow和上一个的边框笔刷着色

.net 如何为DataGridRow和上一个的边框笔刷着色,.net,wpf,xaml,.net,Wpf,Xaml,我创建了一个自定义控件,继承自DataGrid。 我需要在鼠标结束时更改行的边框。简单 除了如果我设置了一个BorderThick 0 1 0 1,底部和顶部边框堆叠,看起来在一些边框上有2个高度。=> 为了避免这种情况,我设置了一个0 1的边界厚度,现在它变得复杂了。 因为我需要更改上一行或下一行的边框笔刷。并为第一个边框添加一个矩形 最后,我在自定义控件的MouseMove和MouseLeave事件中执行了此操作。它起作用了,但我觉得很脏 我想问一下,是否有人对如何做有其他想法?最好是100

我创建了一个自定义控件,继承自DataGrid。 我需要在鼠标结束时更改行的边框。简单

除了如果我设置了一个BorderThick 0 1 0 1,底部和顶部边框堆叠,看起来在一些边框上有2个高度。=>

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

最后,我在自定义控件的MouseMove和MouseLeave事件中执行了此操作。它起作用了,但我觉得很脏

我想问一下,是否有人对如何做有其他想法?最好是100%xaml

谢谢

可以重叠边界。以下XAML的边界厚度为1,边距为0,0,0,-1时,它将与下一个重叠。但是这不能完全解决问题,因为行不在前面,因此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>