Условно изменить цвет фона для надписей в ультрасети

Я использую UltraGrid 9.1. Я отображаю детали в виде карты. Я могу изменить задний цвет заголовка карты, используя следующее свойство:

Ultragrid.DisplayLayout.Override.CardCaptionAppearance.BackColor = System.Drawing.Color.Red

Однако я хочу изменить задний цвет надписи условно, а не для всех строк. Я не могу найти соответствующее свойство, чтобы установить это.

1 ответ

Моя проблема была решена. Нет встроенного свойства, которое можно было бы использовать для установки цвета фона заголовка. Мне пришлось использовать интерфейс DrawFilter.

Вы можете найти больше информации об этом интерфейсе по этой ссылке:

Вы должны создать класс, который реализует IUIElementDrawFilter. В методе GetPhasesToFilter интерфейса проверьте, является ли элемент CardCaptionUIElement и возвращает ли он фазу BeforeDrawBackColor. Затем в методе DrawElement вы можете нарисовать фон, используя метод DrawBackColor аргумента drawParams.

Затем установите откидной фильтр для ультрасетки.

 UltraGrid1.DrawFilter = New CustomDrawFilter()

Class CustomDrawFilter : Implements IUIElementDrawFilter

Public Function DrawElement(drawPhase As DrawPhase, ByRef drawParams As UIElementDrawParams) As Boolean Implements IUIElementDrawFilter.DrawElement
    Dim row = DirectCast(drawParams.Element.GetContext(), UltraGridRow)

    If (row.VisibleIndex Mod 2 = 0 And row.Selected = False) Then
        drawParams.AppearanceData.BackColor = Color.Red
        drawParams.DrawBackColor(drawParams.Element.RectInsideBorders)
        Return True
    End If

    Return False
End Function

Public Function GetPhasesToFilter(ByRef drawParams As UIElementDrawParams) As DrawPhase Implements IUIElementDrawFilter.GetPhasesToFilter
    If (TypeOf (drawParams.Element) Is CardCaptionUIElement) Then
        Return DrawPhase.BeforeDrawBackColor
    Else
        Return DrawPhase.None
    End If

End Function
End Class
Другие вопросы по тегам