选择WPF Listview项目时更改背景

时间:2011-09-16 20:37:06

标签: wpf listview itemtemplate

我有一个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 个答案:

答案 0 :(得分:1)

触发器是按顺序应用的吗?如果将MultiTrigger移动到底部,它可能会起作用,然后在 IsMouseOver触发器之后应用