ListView没有悬停和选定的样式,但具有交替的listviewitem颜色样式

时间:2017-02-07 12:43:37

标签: wpf xaml listview

我尝试创建一个ListView,它没有悬停和选定的样式,但ListViewItem的颜色交替出现。

要禁用我设置ItemContainerStyle的样式。问题是表达式ListView.AlternationIndex在某种程度上总是评估为0 Christian Mosers WPF Inspector告诉我。这导致所有项目的背景颜色为红色。

<ListView ItemsSource="{Binding Configuration}" AlternationCount="2" >
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListViewItem">
                        <Border>
                            <Border.Style>
                                <Style TargetType="Border">
                                    <Style.Triggers>
                                        <Trigger Property="ListView.AlternationIndex" Value="0">
                                            <Setter Property="Background" Value="Red" />
                                        </Trigger>
                                        <Trigger Property="ListView.AlternationIndex" Value="1">
                                            <Setter Property="Background" Value="Blue" />
                                        </Trigger>
                                    </Style.Triggers>
                                </Style>
                            </Border.Style>

                            <ContentPresenter />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

如何在没有选定和悬停样式的情况下交替着色项目?

  • (第一项的背景颜色应为红色,第二项蓝色中的一项为红色,其中一项为红色,依此类推)

  • (当鼠标悬停在ListViewItem或选择ListViewItem时,Backgroundcolor,边框,填充,边距等不应更改

编辑:谢谢你的回答。我更改了添加模板绑定到解决方案以摆脱Name属性。

<ListView ItemsSource="{Binding Configuration}" AlternationCount="2" >
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Style.Triggers>
                <Trigger Property="ListBox.AlternationIndex" Value="0">
                    <Setter Property="Border.Background" Value="Red" />
                </Trigger>
                <Trigger Property="ListBox.AlternationIndex" Value="1">
                    <Setter Property="Border.Background" Value="Blue" />
                </Trigger>
            </Style.Triggers>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListViewItem">
                        <Border Background="{TemplateBinding Background}">
                            <ContentPresenter  Content="{TemplateBinding Content}"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

2 个答案:

答案 0 :(得分:1)

将触发器放入<ControlTemplate.Triggers>

<ListView ItemsSource="{Binding Configuration}" AlternationCount="2" >
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListViewItem">
                        <Border x:Name="Border">
                            <ContentPresenter />
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                                <Setter Property="Background" Value="Red" TargetName="Border" />
                            </Trigger>
                            <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                                <Setter Property="Background" Value="Blue" TargetName="Border" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

答案 1 :(得分:0)

触发器必须位于控件模板上;边境对其父母一无所知。

但是由于要设置的属性(背景)位于边框上,因此您必须为其命名并使用TargetName。

<ListView AlternationCount="2" >
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type ListViewItem}">
                        <Border Name="border">
                            <ContentPresenter/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                                <Setter Property="Background" TargetName="border" Value="Red" />
                            </Trigger>
                            <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                            <Setter Property="Background" TargetName="border" Value="Blue" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
    <ListViewItem Content="ABC"/>
    <ListViewItem Content="DEF"/>
    <ListViewItem Content="GHI"/>
    <ListViewItem Content="JKL"/>
</ListView>

此XAML产生所需的结果:enter image description here