3

我正在对列表视图控件中的项目进行过滤。当项目应该被过滤掉时,我将该项目的可见性更改为 Visibility.Collapsed。

在 Windows 7 中它运行良好:http ://www.imagebam.com/image/4c8cab240432140
Win7

在 Windows 8 上折叠的项目没有完全折叠,并留下大约 4 像素的空白空间:http ://www.imagebam.com/image/6ab32b240431990
Win7

XAML 项目模板:

<ListView.ItemTemplate>
    <DataTemplate DataType="ItemOfInterest">
        <DockPanel Visibility="{Binding Visible}">
            <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
                <TextBlock FontSize="15" Padding="1,0,0,0" TextWrapping="NoWrap" Text="{Binding Path=Title}" Foreground="{Binding Color}"></TextBlock>
                <TextBlock FontSize="11" Padding="10,0,0,0" VerticalAlignment="Bottom" TextWrapping="Wrap" Foreground="Gray" Text="{Binding Path=Owner}"></TextBlock>
                <TextBlock FontSize="12" Padding="10,0,0,0" VerticalAlignment="Bottom" TextWrapping="Wrap" Foreground="White" Text="{Binding Path=StashName}"></TextBlock>
                <TextBlock FontSize="11" Padding="10,0,0,0" VerticalAlignment="Bottom" TextWrapping="Wrap" Foreground="Gray" Text="{Binding Path=StashPos}"></TextBlock>
            </StackPanel>
            <TextBlock DockPanel.Dock="Bottom" FontSize="11" Padding="10,0,0,0" Visibility="{Binding DisplayExtraLine}" TextWrapping="Wrap" Foreground="Gray" Text="{Binding Path=ExtraLine}"></TextBlock>
        </DockPanel>
    </DataTemplate>
</ListView.ItemTemplate>

任何想法是什么原因造成的?或者绕过这个的唯一方法是在过滤掉项目时从列表中删除它们?

4

1 回答 1

6

如果您使用Snoop,您将能够看到每个ListViewItem都在Border高度为 4 的内部。因此,当您折叠时DockPanelBorder仍然的高度为 4。

解决方案是创建一个ItemContainerStyle并隐藏Border以及或代替 child DockPanel

这是我的解决方案。我的 Visible 属性是一个布尔值,这就是我需要转换器的原因。

<Grid.Resources>
    <Style x:Key="ItemContainerStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="Visibility" 
                Value="{Binding Visible, 
                        Converter={StaticResource BoolToVisibility}}"/>
    </Style>
</Grid.Resources>

<Grid.ColumnDefinitions>
    <ColumnDefinition/>
    <ColumnDefinition/>
</Grid.ColumnDefinitions>

<ListView ItemsSource="{Binding Items}" 
          ItemContainerStyle="{StaticResource ItemContainerStyle}">
    <ListView.ItemTemplate>
        <DataTemplate DataType="wpfSampleExplorer:ItemOfInterest">
            <DockPanel>
                <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
                    <TextBlock FontSize="15" Text="{Binding Path=Title}"/>>
                </StackPanel>
            </DockPanel>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
于 2013-03-02T20:13:25.530 回答