2013-03-02 44 views
2

我正在为listview控件中的项目做一个过滤器。当项目应该被过滤出来时,将该项目的可见性更改为Visibility.Collapsed。Visibility.Collapse并没有完全压缩Win8上的项目

而在Windows 7中它的伟大工程:
Win7 http://thumbnails102.imagebam.com/24044/4c8cab240432140.jpg http://www.imagebam.com/image/4c8cab240432140

在Windows 8折叠的项目并没有完全崩溃,剩下大约〜空之4pixels:
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> 

任何想法是什么造成这种情况?或者绕过这一点的唯一方法是,当它们被过滤掉时,从列表中删除项目?

回答

4

如果你使用,你将能够看到每个ListViewItemBorder内侧为4的高度Snoop所以,当你崩DockPanelBorder仍然有4

高度的解决方案是创建一个ItemContainerStyle并隐藏Border以及或代替子女DockPanel

这是我的解决方案。我的可见属性是一个bool,这就是为什么我需要转换器。

<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>