Задание фона для DataRow

WPF
  1. 6 года назад

    Здравствуйте. Пользуюсь вашей темой DarkBlue (правда давно не обновлял, а изменения я как вижу по темам были).

    Там замечательно устанавливается серый фон, но иногда мне нужно выделить несколько строк в зависимости от данных.
    Выделяю как то так:

    Private Выгоднасумма1 As SolidColorBrush = New SolidColorBrush(Color.FromRgb(252, 213, 180))
    Private Выгоднасумма2 As SolidColorBrush = New SolidColorBrush(Color.FromRgb(230, 184, 183))
    Private Sub табТаблица_LoadingRow(sender As Object, e As System.Windows.Controls.DataGridRowEventArgs) Handles табТаблица.LoadingRow
            Dim Строка As DataRowView = e.Row.DataContext
    
            If Строка.Item("Сумма1") > Строка.Item("Сумма2") Then
                e.Row.Background = Выгоднасумма1
                e.Row.ToolTip = Me.FindResource("табТаблицаToolTip0") '"Выгодна сумма1"
            Else
                e.Row.Background = Выгоднасумма2
                e.Row.ToolTip = Me.FindResource("табТаблицаToolTip1") '"Выгодна сумма2"
            End If
        End Sub

    Вроде как свойство меняется но серый градиент со строки не уходит.
    я так понимаю все это из за setter-а "template" в "<Style TargetType="{x:Type DataGridRow}">"

    Вопрос, как мне можно проставить свойство цвета фона для некоторых строк, но не отказываясь от темы полностью.

  2. Alexandr_Erohin

    Jun 3 Администратор

    Ну вы правильно мыслите, нужно переделать шаблон под себя, в частности для строк в DataGrid используются следующие элементы

    <Rectangle x:Name="BackgroundRectangle" Grid.ColumnSpan="2" Grid.RowSpan="2" Fill="{StaticResource ControlLightBackground}"/>
    <Rectangle x:Name="SelectedRectangle" Fill="{StaticResource ControlActiveBorderBrush}" Opacity="0" Grid.ColumnSpan="2" Grid.RowSpan="2" />

    BackgroundRectangle - стоит по умолчанию, SelectedRectangle появляется при выделении строки, HoverRectangle при наведении мышки. Задайте собственные значения для свойства Fill

  3. Ну то есть мне нужно сделать копию шаблона но только изменить параметр Fill для этих двух бекграундов?
    Пичаль если это так. Все таки не хотелось плодить шаблоны по такому пустяку. Может стоит даже отказаться от выделения строк.
    Проблема то больше не в лени(там копипаста), а в том что поддерживать потом весь этот набор шаблонов замучаешься, каждое изменение нужно будет не забыть продублировать. Или можно переопределить для этой таблицы только эти два параметра? Можно поподробнее пожалуйста.

  4. Alexandr_Erohin

    Jun 5 Администратор

    Ну чтобы просто изменить фон строк в DataGrid есть спец. свойство RowBackground. Но если нужно изменить не только цвет фона по умолчанию, но и такие детали как цвет при наведении, при выделении и т.д. это делается только через задание нового шаблона. Чтобы не путать шаблоны в дальнейшем просто присвойте осмысленное имя ему, например "DataGridRowTemplateGreen", а затем подключите этот шаблон в DataGrid:

     <DataGrid ItemContainerStyle="{StaticResource DataGridRowTemplateGreen}" ...>
  5. Найти это сообщение Alexandr_Erohin Ну чтобы просто изменить фон строк в DataGrid есть спец. свойство RowBackground.

    ну то есть то что я написал Row.Background? В том то и дело что проставляться проставляется, но не отражается на самом гриде. Все равно серо. Даже не знаю поможет ли шаблон. Я так понимаю получается все дело именно в тригерах. И завести три разных типа строки в одном шаблоне нельзя.

    А можно шаблон настроить таким образом что бы шаблон выделял строки по условию, а не через событие LoadingRow?

или зарегистрируйтесь чтобы ответить