2011-09-09 16 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)、スクロールして上下に移動すると必要な項目が生成されます。

関連する問題