2010-11-22 19 views
5

TreeViewが次のように設定されている場合、TreeViewの仮想化を停止できますか?WPF:TreeView仮想化が機能しない

<TreeView 
    ItemsSource="{Binding}" 
    VirtualizingStackPanel.IsVirtualizing="True"> 
    <TreeView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel /> 
     </ItemsPanelTemplate> 
    </TreeView.ItemsPanel> 
    <TreeView.ItemContainerStyle> 
     <Style 
      TargetType="{x:Type TreeViewItem}"> 
      <Setter 
       Property="IsExpanded" 
       Value="{Binding IsExpanded, Mode=TwoWay}"/> 
     </Style> 
    </TreeView.ItemContainerStyle> 
</TreeView> 

私は私がTreeViewItemsのすべてが作成されている(チェックすると利用スヌープ)ノードを展開すると、仮想化されていないものを持っています。私はTreeViewがそのコンテンツを仮想化することを妨げるコンテナの組み合わせがあるのだろうかと思っています。 (StackPanelでホストするなど)

+0

この投稿は、仮想化のカスタマイズに役立つかもしれません。http://stackoverflow.com/questions/126230/resources-and-guides-to-ui-virtualization-in-wpf – Domokun

答えて

5

問題はスタイリングの問題でした。いくつかの調査の結果、TreeView(つまりDataType={x:Type TreeView}にはx:Keyが含まれていないもの)をターゲットとする名前のないスタイルがあり、1つはをそれぞれ上書きしていたことがわかりました。

これらのスタイルには、ItemsPanelVirtualizingStackPanelに設定するトリガーはなく、仮想化については言及していません。スタイルが削除されると、TreeViewは正常に動作します。ローカルプロパティでItemsPanelVirtualizingStackPanel.Isvirtualizing="True"TreeViewに設定しても、これらのプロパティはTreeViewItemsに伝播されていないため、サブビューカテゴリは仮想化されません(仮想化の動作はTreeViewItemに依存します)

関連する問題