Visibility.Collapse不会完全折叠Win8上的项目

时间:2013-03-02 17:31:07

标签: c# wpf xaml listview windows-8

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

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

在Windows 8上,折叠项目未完全折叠,并留下约4个空白空间:
Win7 http://thumbnails106.imagebam.com/24044/6ab32b240431990.jpg http://www.imagebam.com/image/6ab32b240431990

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>

任何想法导致了什么?或者绕过这个的唯一方法是在过滤掉项目时从列表中删除项目?

1 个答案:

答案 0 :(得分:5)

如果您使用Snoop,则可以看到每个ListViewItem位于Border内,高度为4.所以当您折叠DockPanel {时{1}}的高度仍为4。

解决方案是创建Border并隐藏ItemContainerStyle以及代替孩子Border

这是我的解决方案。我的Visible属性是bool,这就是我需要转换器的原因。

DockPanel