Изменить фон элемента WPF Listview, когда он выбран

У меня есть WPF Listview, и я переопределил ListView.ItemTemplate, чтобы изменить цвет фона элементов в событии ListViewItem.IsMouseOver следующим образом:

<AlternationConverter x:Key="BackgroundConverter">
    <SolidColorBrush>White</SolidColorBrush>
    <SolidColorBrush>
        <SolidColorBrush.Color>
            <Color A="242" R="242" G="242" B="242" />
        </SolidColorBrush.Color>
    </SolidColorBrush>
</AlternationConverter>

    <Style x:Key="alternatingWithBinding" TargetType="{x:Type ListViewItem}">
        <Setter Property="Height" Value="31"/>
        <Setter Property="Background" 
          Value="{Binding RelativeSource={RelativeSource Self},
                 Path=(ItemsControl.AlternationIndex),
                 Converter={StaticResource BackgroundConverter}}"/>
        <Style.Triggers>
            <Trigger Property="ListViewItem.IsSelected" Value="True">
                <Setter Property="ListViewItem.Background" Value="Yellow" />
            </Trigger>
            <Trigger Property="ListBoxItem.IsMouseOver" Value="True">
                <Setter Property="ListBoxItem.Background" Value="Blue" />
            </Trigger>
        </Style.Triggers>
    </Style>

Я пытаюсь добиться другого цвета при наведении курсора на уже выбранный элемент (желтый). Таким образом, на всех предметах это будет синий указатель мыши, а на выбранном желтом - зеленый. Я попробовал следующую попытку, используя MultiTrigger, но это не сработало:

        <Style x:Key="alternatingWithBinding" TargetType="{x:Type ListViewItem}">
        <Setter Property="Height" Value="31"/>
        <Setter Property="Background" 
          Value="{Binding RelativeSource={RelativeSource Self},
                 Path=(ItemsControl.AlternationIndex),
                 Converter={StaticResource BackgroundConverter}}"/>
        <Style.Triggers>
            <Trigger Property="ListViewItem.IsSelected" Value="True">
                <Setter Property="ListViewItem.Background" Value="Yellow" />
            </Trigger>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="ListBoxItem.IsMouseOver" Value="True"/>
                    <Condition Property="ListBoxItem.IsSelected" Value="True"/>
                </MultiTrigger.Conditions>
                <Setter Property="ListBoxItem.Background" Value="Green" />
            </MultiTrigger>
            <Trigger Property="ListBoxItem.IsMouseOver" Value="True">
                <Setter Property="ListBoxItem.Background" Value="Blue" />
            </Trigger>
        </Style.Triggers>
    </Style>

Есть идеи? Благодарю.

1 ответ

Решение

Триггеры применяются по порядку? Это может сработать, если вы переместите MultiTrigger вниз, тогда он будет применяться после триггера IsMouseOver.

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