我有一个 ListView
使用 WrapPanel
作为它的 ItemsPanel
,我直接使用 ListViewItem
作为内容。但是当一个 ListViewItem.Visibility
是 Collapsed
时,您仍然可以看到它正在使用的空间。
首先,一个类似于我使用的示例 XAML 代码:
<Grid>
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Hidden" ItemContainerStyle="{DynamicResource ContainerStyle}">
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}" x:Key="ContainerStyle">
<Setter Property="Background" Value="Transparent" />
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<ContentPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.Resources>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel ItemHeight="200" ItemWidth="200"/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListViewItem Margin="10" Visibility="Visible">
<Border Background="Red"/>
</ListViewItem>
<ListViewItem Margin="10" Visibility="Visible">
<Border Background="Blue"/>
</ListViewItem>
<ListViewItem Margin="10" Visibility="Visible">
<Border Background="Green"/>
</ListViewItem>
</ListView>
</Grid>
例如,当所有项目都可见(上面的代码)时,我有这个:
但是,如果我更改第一个项目以使其折叠如下
<ListViewItem Margin="10" Visibility="Collapsed">
<Border Background="Red"/>
</ListViewItem>
结果是这样的:
我期望的是以下内容:
因此,我不明白为什么它会这样,
Collapsed
似乎表现得就像 Hidden
。我将它直接应用到项目上,不知道还有什么可做的。我尝试了我发现的不同解决方案,最显着的是 this one about binding to Visibility in the style 和 this one going more or less in the same direction 但没有成功,结果相同。
最佳答案
接受的答案实际上没有提供解决方案,而是在其评论部分提供。
如果您设置 ItemWidth,WrapPanel 将为绑定(bind)到自身的所有项目保留 ItemWidth,无论是否可见。
此处的解决方法不是在 WrapPanel 上设置 ItemWidth,而是在 ItemTemplate 上设置 Width。
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel MinWidth="96" />
</DataTemaplate>
</ItemsControl.ItemTemplate>
关于wpf - WrapPanel 中的 ListViewItem 折叠时占用空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40427259/