2010-11-22 7 views
5

Was kann eine TreeView von der Virtualisierung stoppen, wenn die TreeView wie folgt eingerichtet ist?WPF: TreeView-Virtualisierung funktioniert nicht

<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> 

Ich habe eine, die nicht virtualisiert, wenn ich die Knoten erweitern (und Verwendung Snoop zu überprüfen) Ich habe alle der TreeViewItems geschaffen. Ich frage mich, ob es eine Kombination von Containern gibt, die verhindern, dass der TreeView seinen Inhalt virtualisiert. (wie hosten es in einem StackPanel zum Beispiel)

+0

Dieser Beitrag kann bei der Anpassung der Virtualisierung hilfreich sein: http://stackoverflow.com/questions/126230/resources-and-guides-to-ui-virtualization-in-wpf – Domokun

Antwort

5

Das Problem war mit dem Styling. Nach einigen Nachforschungen fanden wir heraus, dass es einen unbenannten Stil gab, der auf das TreeView abzielte (d. H. Eines mit DataType={x:Type TreeView} ohne x:Key) und eines zielte auf das TreeViewItem in unserer App.xaml (oder gleichwertig) Es überschrieb das ControlTemplate für jedes.

Diese Stile hatten nicht die Auslöser, um die ItemsPanel auf VirtualizingStackPanel zu setzen und keine Virtualisierung erwähnt. Wenn die Stile entfernt werden, funktioniert die TreeView gut. Obwohl die lokalen Eigenschaften die ItemsPanel und die VirtualizingStackPanel.Isvirtualizing="True" auf der TreeView setzen, wurden diese Eigenschaften nicht auf TreeViewItems propagiert, so dass die oberste Ebene der TreeView virtualisieren würde, während die Unterkategorien nicht (wie ihr Virtualisierungsverhalten war abhängig von der TreeViewItem)