2012-02-08 3 views
3

wpfでListViewを持っています。これはフィールドのリストを表示するために使用されています。プロパティ値に基づいて、実行時にフィールドの一部を折りたたむことができます。 ListVIewを除いて、その動作上の罰金は、実行時に折りたたまれたListViewItemのために予約されたスペースを崩壊させません。VirtualizingStackPanelが折りたたまれたアイテムを正しく処理していません

enter image description here

私は(折りたたみとして可視性を有している)、スヌープに余分なListViewItemsを見ることができています、ListViewコントロールは、あまりにも上向きにアイテムを移動させるが、それは空のスペースを削除するには、その高さを調整していません!

ItemsPanelをStackPanelに変更すると、この問題が解決されるため、これはVirtualizedStackPanelのために起こっていると確信できます。ここでは、関連するListView XAMLは次のとおりです。

<ListView 
    x:Class="Wizards.FieldBinderModelListView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Margin="0" 
    VerticalAlignment="Top" 
    HorizontalContentAlignment="Stretch" 
    VerticalContentAlignment="Top" 
    Background="White" 
    BorderThickness="0" 
    Grid.IsSharedSizeScope="True" 
    KeyboardNavigation.DirectionalNavigation="Continue" 
    Padding="1" 
    ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
    ScrollViewer.VerticalScrollBarVisibility="Hidden" 
    SelectionChanged="ListViewSelectionChanged" 
    SelectionMode="Single"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
     <!--Works fine with StackPanel but not with VirtualizingStackPanel 
      Explicitly added this PanelTemplate to show that it works with    
      StackPanel;ListView uses VirtualizingStackPanel as default panel 
      and causes same problem-->    
     <!--<StackPanel Orientation="Vertical" VerticalAlignment="Top"/>--> 
      <VirtualizingStackPanel Orientation="Vertical" 
       VerticalAlignment="Top"/> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="True"> 
       <Setter Property="Foreground" Value="Black" /> 
      </Trigger> 
      <DataTrigger Binding="{Binding Status}" 
         Value="{x:Static local:Status.NotExisting}"> 
       <!--Hide the fields which are in NotExisting state; 
        Need a trigger here as Status can be different --> 
       <Setter Property="Visibility" Value="Collapsed" /> 
      </DataTrigger> 
     </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.ItemTemplate> 
    <DataTemplate DataType="{x:Type View:FieldViewModel}"> 
     <local:FieldEditor 
      Margin="0,2,0,0" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Top" 
      HorizontalContentAlignment="Stretch" 
      VerticalContentAlignment="Top" 
      Padding="0"> 
      <!--<local:FieldEditor.Style> 
       <Style TargetType="{x:Type local:FieldEditor}"> 
       <Style.Triggers> 
        <DataTrigger 
        Binding="{Binding Status}" 
        Value="{x:Static local:Status.NotExisting}"> 
         <Setter Property="Visibility" Value="Collapsed" /> 
        </DataTrigger> 
       </Style.Triggers> 
       </Style> 
      </local:FieldEditor.Style>--> 
     </local:FieldEditor> 
    </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

これはVirtualizingStackPanelのバグですか?誰もが同様の問題に直面した?回避策はありますか?


アップデート:接続でMSにこのバグを報告

からhttps://connect.microsoft.com/VisualStudio/feedback/details/734113/virtualizingstackpanel-not-handling-collapsed-items-correctly

+0

あなたには、いくつかのアイテムを折りたたむコードを投稿してください。なぜ仮想化リストに隠された垂直スクロールバー? – Paparazzi

+0

ありがとうBalamBalam、関連するxamlの投稿を更新しました。スクロールバーは、このリストビューが親リストビューに追加されるときに非表示になります。このListViewは、このListViewのスクロール複数のインスタンスを処理し、他のコントロールは親リストビューにあります。それらを有効にしてもこの動作は変わりません。 – akjoshi

+0

[VirtualizingStackPanel'(http://stackoverflow.com/a/2784220/302677)を使うよりも、コントロールを仮想化する方がはるかに多いですが、私はListViewがデフォルトで仮想化されていると思っていました。 – Rachel

答えて

6

私はあなたの問題を再現するために管理。確かにVirtualizingStackPanelのバグのようです。 周りの仕事ではなく、それらを崩壊のゼロに隠されたアイテムの高さを設定することです:

<DataTrigger Binding="{Binding Status}" Value="False"> 
    <Setter Property="Height" Value="0" /> 
    <Setter Property="IsEnabled" Value="False"/> 
    <!--<Setter Property="Visibility" Value="Collapsed" />--> 
</DataTrigger> 
+0

Philさん、高さを0に設定すると問題は解決しますが、VisibilityをCollapsedに設定しても機能しないのはなぜですか? – akjoshi

+0

私は恩恵を受けなかったのは残念です.-( – Phil

+0

はい、私は数日間外出していて、あなたの答えを確認できませんでした。 – akjoshi

関連する問題