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が高さ 4 の の中にあることがわかりBorderます。したがって、折りたたむとDockPanelBorder静止画の高さは 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>
于 2013-03-02T20:13:25.530 に答える