2010-11-22 3 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})를 타겟팅하는 이름없는 스타일이 있고 우리의 App.xaml (또는 이에 상응하는 제품)에 TreeViewItem을 타겟팅하는 스타일이 각각 각각 ControlTemplate을 무시하고 있음을 발견했습니다.

이러한 스타일에는 ItemsPanelVirtualizingStackPanel으로 설정하는 트리거가 없었으며 가상화에 대한 언급이 없었습니다. 스타일을 제거하면 TreeView가 올바르게 작동합니다. 로컬 속성이 ItemsPanelVirtualizingStackPanel.Isvirtualizing="True"TreeView으로 설정하더라도 이러한 속성은 TreeViewItems으로 전파되지 않으므로 하위 범주는 그렇지 않은 반면 가상보기 동작은 가상화됩니다 (가상화 동작이 TreeViewItem에 종속 됨)