Как изменить список представленных элементов выделенным цветом в WPF - PullRequest
2 голосов
/ 11 июля 2019

Я просто пытаюсь изменить выделенный цвет элемента списка в WPF. Решения, которые я нашел в Интернете, включая Stackoverflow, не влияют на мой просмотр списка. Я схожу с ума? Я что-то пропустил? Пожалуйста, покажи мне, как это сделать. Вот мой пример кода. Элементы по-прежнему отображаются по умолчанию синим цветом.

<Window.Resources>
    <Style TargetType="ListViewItem">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static 
SystemColors.HighlightBrushKey}" Color="Red" />
        </Style.Resources>
    </Style>
</Window.Resources>

<Grid>
    <ListView VerticalAlignment="Top" Background="#2e2e2e" 
Foreground="White">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static 
SystemColors.HighlightTextBrushKey}"
                             Color="Red" />

                    <SolidColorBrush x:Key="{x:Static 
SystemColors.HighlightBrushKey}"
                             Color="Purple" />
                </Style.Resources>
            </Style>
        </ListView.ItemContainerStyle>

        <ListViewItem Content="ITEM" />
        <ListViewItem Content="ITEM" />
        <ListViewItem Content="ITEM" />
        <ListViewItem Content="ITEM" />
        <ListViewItem Content="ITEM" />
    </ListView>

    <Button VerticalAlignment="Bottom" Height="50" />
 </Grid>

1 Ответ

2 голосов
/ 11 июля 2019

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

<Style TargetType="ListBoxItem">
  <Style.Resources>
    <SolidColorBrush x:Key="HighlightTextBrushKey"
                     Color="Red" />
    <SolidColorBrush x:Key="HighlightBrushKey"
                     Color="Purple" />
    <SolidColorBrush x:Key="HighlightMouseOverBrushKey"
                     Color="{Binding Source={StaticResource HighlightBrushKey}, Path=Color}" 
                     Opacity="0.3" />
  </Style.Resources>

  <Style.Setters>
    <Setter Property="Template">
      <Setter.Value>
        <ControlTemplate TargetType="ListBoxItem">
          <Border BorderBrush="{TemplateBinding BorderBrush}"
                  BorderThickness="{TemplateBinding BorderThickness}"
                  Background="{TemplateBinding Background}" 
                  Padding="{TemplateBinding Padding}"
                  Margin="{TemplateBinding Margin}">
            <ContentPresenter />
          </Border>

          <ControlTemplate.Triggers>
            <Trigger Property="IsSelected" Value="True">
              <Setter Property="Background" Value="{StaticResource HighlightBrushKey}"/>
              <Setter Property="Foreground" Value="{StaticResource HighlightTextBrushKey}"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
              <Setter Property="Background" Value="{StaticResource HighlightMouseOverBrushKey}"/>
              <Setter Property="Foreground" Value="{StaticResource HighlightTextBrushKey}"/>
            </Trigger>
          </ControlTemplate.Triggers>
        </ControlTemplate>
      </Setter.Value>
    </Setter>
  </Style.Setters>
</Style>

Альтернативой триггерам можно анимировать переходы с помощью VisualStateManager

...