2011-09-09 2 views
0

StackPanel에서 UI 가상화에 대한 질문이 있습니다.StackPanel에서 많은 컨트롤을 추가하면 UI 가상화가 적용됩니까?

<ScrollViewer> 
    <StackPanel Orientation="Vertical"> 
     <!--item1.--> 
     <StackPanel Orientation="Horizontal" Margin="5"> 
      <Button/> 
      <TextBlock Text="oh hi."/> 
     </StackPanel>   

     <!--item2.--> 
     <StackPanel Orientation="Horizontal" Margin="5"> 
      <Button/> 
      <TextBlock Text="oh hi."/> 
     </StackPanel>   

     <!--item3.--> 
     <StackPanel Orientation="Horizontal" Margin="5"> 
      <Button/> 
      <TextBlock Text="oh hi."/> 
     </StackPanel>   

     <!--item4.--> 
     <StackPanel Orientation="Horizontal" Margin="5"> 
      <Button/> 
      <TextBlock Text="oh hi."/> 
     </StackPanel>   

     ... 


     <!--item9999.--> 
     <StackPanel Orientation="Horizontal" Margin="5"> 
      <Button/> 
      <TextBlock Text="oh hi."/> 
     </StackPanel>   

    </StackPanel> 
</ScrollViewer> 

WPF UI 가상화에 대해 들었습니다.

그리고 StackPanel에 많은 컨트롤을 추가하면이 StackPanel에서 UI 가상화가 자동으로 작동합니까?

StackPanel.VirtualizingStackPanel.IsVirtualizing이 기본적으로 True로 설정되어 있음을 알고 있습니다.

답변

1

여기에 예제에 대한 "가상"은 없습니다. 스택 패널 안에 9999 개의 항목을 명시 적으로 만들었습니다.

가상화는 목록, 트리, 그리드와 같은 다른 항목 컨트롤이 그 안에 가상화 패널을 가지고 있고 항목 컨트롤이 필요에 따라 항목을 생성/제거/재사용 할 때 이 나타나면 스택 패널 실제로 몇 개 밖에 없을 때 9999 개의 항목이 있습니다.

에 대한 간단한 비교하여 그 안에 9999 개 항목의 목록의 ItemsSource 및 DataTemplate을 함께 ListBox 컨트롤을 것 이상 :

<ListBox ItemsSource="{Binding Path=TheListOf9999Items}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" Margin="5"> 
       <Button/> 
       <TextBlock Text="oh hi."/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

목록 상자 내부적으로는 가상화 스택 패널을 것이다 (그 ItemsPanel) 그러면 위아래로 스크롤 할 때 필요에 따라 항목을 생성합니다.

관련 문제