Как раскрасить BorderBrush для DataGridRow и предыдущего

Я создал настраиваемый элемент управления, унаследованный от DataGrid. Мне нужно изменить границу строк при наведении курсора мыши. Легкий.

За исключением того, что если я установил BorderThick 0 1 0 1, нижнюю и верхнюю границу стека, и похоже, что на некоторых границах есть 2 высоты. => Как раскрасить BorderBrush для DataGridRow и предыдущего

Чтобы избежать этого, я установил 0 0 0 1 BorderThick, и теперь это стало сложным. Потому что мне нужно изменить BorderBrush предыдущей или следующей строки. И добавьте прямоугольник для первой границы.

В итоге я сделал это в событиях MouseMove и MouseLeave в моем настраиваемом элементе управления. Это работает, но я чувствую себя грязным: D

Я любезно спрашиваю, есть ли у кого-нибудь еще идеи, как это сделать? Предпочтительно 100% xaml.

Спасибо !

Хотите прокомментировать? :(

OK cowboy 29.11.2018 17:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете перекрыть 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>

Это будет выглядеть так:

Preview XAML

Это требует некоторой тонкой настройки, в зависимости от BorderThickness, но я надеюсь, что вы уловили идею этой концепции.

Другие вопросы по теме