Я создал настраиваемый элемент управления, унаследованный от DataGrid. Мне нужно изменить границу строк при наведении курсора мыши. Легкий.
За исключением того, что если я установил BorderThick 0 1 0 1, нижнюю и верхнюю границу стека, и похоже, что на некоторых границах есть 2 высоты. => 
Чтобы избежать этого, я установил 0 0 0 1 BorderThick, и теперь это стало сложным. Потому что мне нужно изменить BorderBrush предыдущей или следующей строки. И добавьте прямоугольник для первой границы.
В итоге я сделал это в событиях MouseMove и MouseLeave в моем настраиваемом элементе управления. Это работает, но я чувствую себя грязным: D
Я любезно спрашиваю, есть ли у кого-нибудь еще идеи, как это сделать? Предпочтительно 100% xaml.
Спасибо !





Вы можете перекрыть Border. Следующий XAML имеет 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>
Это будет выглядеть так:
Это требует некоторой тонкой настройки, в зависимости от BorderThickness, но я надеюсь, что вы уловили идею этой концепции.
Хотите прокомментировать? :(