wpfでListView
を持っています。これはフィールドのリストを表示するために使用されています。プロパティ値に基づいて、実行時にフィールドの一部を折りたたむことができます。 ListVIewを除いて、その動作上の罰金は、実行時に折りたたまれたListViewItemのために予約されたスペースを崩壊させません。VirtualizingStackPanelが折りたたまれたアイテムを正しく処理していません
私は(折りたたみとして可視性を有している)、スヌープに余分な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にこのバグを報告
あなたには、いくつかのアイテムを折りたたむコードを投稿してください。なぜ仮想化リストに隠された垂直スクロールバー? – Paparazzi
ありがとうBalamBalam、関連するxamlの投稿を更新しました。スクロールバーは、このリストビューが親リストビューに追加されるときに非表示になります。このListViewは、このListViewのスクロール複数のインスタンスを処理し、他のコントロールは親リストビューにあります。それらを有効にしてもこの動作は変わりません。 – akjoshi
[VirtualizingStackPanel'(http://stackoverflow.com/a/2784220/302677)を使うよりも、コントロールを仮想化する方がはるかに多いですが、私はListViewがデフォルトで仮想化されていると思っていました。 – Rachel