[英]Visibility.Collapse doesn't fully collapse item on Win8
我正在為listview控件中的項目進行過濾。 當項目被過濾掉時,我將該項目的可見性更改為Visibility.Collapsed。
在Windows 7中它運行良好:
http://www.imagebam.com/image/4c8cab240432140
在Windows 8上,折疊項目沒有完全折疊,並留下大約4個空白空間:
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>
是什么原因引起了這個? 或者繞過這個的唯一方法是在過濾掉項目時從列表中刪除項目?
如果使用Snoop,您將能夠看到每個ListViewItem
位於高度為4的Border
內。因此,當您折疊DockPanel
, Border
的高度仍為4。
解決方案是創建一個ItemContainerStyle
並隱藏Border
以及代替子DockPanel
。
這是我的解決方案。 我的Visible屬性是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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.