Условно изменить цвет фона для надписей в ультрасети
Я использую 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