Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 不带悬停和选定样式但具有交替listviewitem颜色样式的ListView_Wpf_Xaml_Listview - Fatal编程技术网

Wpf 不带悬停和选定样式但具有交替listviewitem颜色样式的ListView

Wpf 不带悬停和选定样式但具有交替listviewitem颜色样式的ListView,wpf,xaml,listview,Wpf,Xaml,Listview,我尝试创建一个列表视图,它没有悬停和选定的样式,但为列表视图项提供了交替的颜色 要禁用样式,我设置了ItemContainerStyle。问题是表达式ListView.alternationandex总是以某种方式计算为0,正如Christian MosersWPF Inspector告诉我的那样。这将导致所有项目的背景色均为红色 <ListView ItemsSource="{Binding Configuration}" AlternationCount="2" > &l

我尝试创建一个
列表视图
,它没有悬停和选定的样式,但为
列表视图项
提供了交替的颜色

要禁用样式,我设置了
ItemContainerStyle
。问题是表达式
ListView.alternationandex
总是以某种方式计算为
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>

触发器必须位于控制模板上;Border对其父级一无所知

但由于要设置的属性(背景)位于边界上,因此必须命名它并使用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生成所需的结果:

将触发器放入



您真的只想禁用选择样式,还是根本不需要选择功能?如果您只想显示一个动态的项目堆栈,您也可以恢复到
项目控件
。@grek40我需要选择功能这个答案和我发布的答案有什么区别?为什么你取消删除了之前的答案,基本上是复制了我的…?我没有复制你的答案。我删除了我的,因为我没有正确地阅读问题。然后我继续使用VS测试另一个解决方案,它恰好与您的解决方案相同。这就是为什么,顺便说一下,我没有OP的绑定,也没有实际的测试数据。
<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>
<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>