改变ListView中第一个子条目的可见性

本文关键字:可见性 ListView 第一个 改变 | 更新日期: 2023-09-27 18:04:06

我有ListView控件在我的wpf窗口,其中包括自定义模板,并有ItemSource绑定到字符串集合:

<ListView ItemsSource="{Binding ListOfStrings}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">                       
                <Expander Visibility="{Binding ToSomethingIDontKnowTo}"/>                        
                <TextBlock Text="{Binding}"/>
            </StackPanel>
        </DataTemplate>
    </ListView.ItemTemplate>            
</ListView>

我需要Expander只显示第一行。我知道第一个元素的样式可以用Trigger来改变,像这样:

<Style TargetType="ListViewItem">
    <Style.Triggers>
        <Trigger Property="ItemsControl.AlternationIndex" Value="0">
            <Setter Property="SomeProperty" Value="SomeValue" />
        </Trigger>               
    </Style.Triggers>
</Style>

,但我还没有找到一种方法来应用这对ListViewItem的子控件

改变ListView中第一个子条目的可见性

这就是如何触发Expander可见性

       <ListView AlternationCount="{Binding ItemsSource.Count, RelativeSource={RelativeSource Self}}"  ItemsSource="{Binding ListOfStrings}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Expander Header="My">
                        <Expander.Style>
                            <Style TargetType="Expander">
                                <Setter Property="Visibility" Value="Collapsed"></Setter>
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding (ItemsControl.AlternationIndex), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}" Value="0">
                                        <Setter Property="Visibility" Value="Visible"></Setter>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Expander.Style>
                    </Expander>
                    <TextBlock Text="{Binding}"/>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>