Как установить цвет фона на основе свойства bool в WPF - PullRequest
22 голосов
/ 06 декабря 2008

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

Я хочу изменить цвет фона всей строки на основе флага bool в моем объекте с привязкой к данным.

В этом случае у меня есть объект CaseDetail, который при наличии внутренних заметок IsInternalNote требует изменения цвета строки.

Как мне это сделать в WPF?

То, что у меня есть сейчас (очень просто), которое НЕ меняет цвет.

<ListView ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True"  >
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Date, StringFormat=MMM dd\, yyyy h:mm tt}" Header="Date" Width="Auto" />
                    <GridViewColumn DisplayMemberBinding="{Binding SubmittedBy}" Header="Submitted By" Width="Auto" />
                    <GridViewColumn Width="Auto" Header="Description" x:Name="colDesc">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>                              
                                <ScrollViewer MaxHeight="80" Width="300">
                                    <StackPanel Orientation="Vertical">
                                        <TextBlock Text="{Binding Description}"  TextWrapping="Wrap"   />
                                        <TextBlock Text="{Binding File.FileName}" TextWrapping="Wrap"  />
                                    </StackPanel>
                                </ScrollViewer>                             
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>                    
                </GridView>
            </ListView.View>
        </ListView>

Ответы [ 2 ]

32 голосов
/ 06 декабря 2008

Я столкнулся с несколькими проблемами, пытаясь это сделать, и закончил вот так

<ListBox ...>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <Border x:Name="BGBorder">
         <!-- --> 
      </Border>
      <DataTemplate.Triggers>
        <DataTrigger 
          Binding="{Binding Path=DataContext.IsAborted, RelativeSource={RelativeSource TemplatedParent}}" 
          Value="True">
          <Setter Property="Background" TargetName="BGBorder" Value="Red">
          </Setter>
        </DataTrigger>
      </DataTemplate.Triggers>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

Могут быть альтернативы, но как только у меня все заработало, я перестал искать:)

2 голосов
/ 06 декабря 2008

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

<DataTemplate.Triggers>
    <Trigger Property="IsInternalNote" Value="True">
        <Setter Property="Background" Value="Red" />
    </Trigger>
</DataTemplate.Triggers>
...