WPF:ListViewItem 上的 IsMouseOver 触发器

WPF: IsMouseOver trigger on ListViewItem

我有以下代码:

    <Style>
        <Style TargetType="{x:Type ListViewItem}" x:Key="MyStyle">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Red" />
            </Trigger>
        </Style.Triggers>
    </Style>

当我在我的 ListView 上使用这种样式设置 ItemContainerStyle 属性 时,它不起作用 - 背景没有改变。

我看到几个类似的问题,人们回答说它在以下情况下不起作用 一个 ListView 但没有人简单回答如何创建此触发器。

你有什么想法吗?

您需要更改 listviewitem 的模板才能实现此目的。 这是一个基于 win10 模板的有效标记:

    <ListView>
        <ListView.Resources>
            <Style TargetType="ListViewItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate  TargetType="{x:Type ListViewItem}">
                            <Border x:Name="Bd" 
                BorderBrush="{TemplateBinding BorderBrush}" 
                BorderThickness="{TemplateBinding BorderThickness}"
                Background="Transparent" 
                Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
                                <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" 
                              Content="{TemplateBinding Content}" 
                              ContentStringFormat="{TemplateBinding ContentStringFormat}" 
                              HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                            </Border>
                            <ControlTemplate.Triggers>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="IsMouseOver" Value="True"/>
                                    </MultiTrigger.Conditions>
                                    <Setter Property="Background" TargetName="Bd" Value="Red"/>
                                    <Setter Property="BorderBrush" TargetName="Bd" Value="#A826A0DA"/>
                                </MultiTrigger>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="Selector.IsSelectionActive" Value="False"/>
                                        <Condition Property="IsSelected" Value="True"/>
                                    </MultiTrigger.Conditions>
                                    <Setter Property="Background" TargetName="Bd" Value="Orange"/>
                                    <Setter Property="BorderBrush" TargetName="Bd" Value="#FFDADADA"/>
                                </MultiTrigger>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="Selector.IsSelectionActive" Value="True"/>
                                        <Condition Property="IsSelected" Value="True"/>
                                    </MultiTrigger.Conditions>
                                    <Setter Property="Background" TargetName="Bd" Value="Yellow"/>
                                    <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/>
                                </MultiTrigger>
                                <Trigger Property="IsEnabled" Value="False">
                                    <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.Resources>

        <ListViewItem >AAAAAAAAAAAA</ListViewItem>
        <ListViewItem>BBBBBBBBBBBB</ListViewItem>
        <ListViewItem>CCCCCCCCCCCC</ListViewItem>
    </ListView>