2011-10-13 15 views
0

私はこのようなリストビュー内の私のユーザーコントロールを仮想化しようとしています:私はアイテムとして長方形を使用している場合virtualzing、dosen'tの仕事を仮想化、ListViewがユーザーコントロールを仮想化しないのはなぜですか?

<ListView VirtualizingStackPanel.IsVirtualizing="True" 
         VirtualizingStackPanel.CleanUpVirtualizedItem="stackPanel1_CleanUpVirtualizedItem" 
         VirtualizingStackPanel.VirtualizationMode="Standard" 
         Height="239" HorizontalAlignment="Left" Name="stackPanel1" VerticalAlignment="Top" Width="133" >    

       <ListView.Items> 
        <me:UserControl1 Backg="Green" /> 
        <me:UserControl1 Backg="Blue" /> 
        <me:UserControl1 Backg="Black" /> 
        <me:UserControl1 Backg="Red" /> 
        <me:UserControl1 Backg="Green" /> 
        <me:UserControl1 Backg="Blue" /> 
        <me:UserControl1 Backg="Black" /> 
        <me:UserControl1 Backg="Red" /> 
        <me:UserControl1 Backg="Blue" /> 
        <me:UserControl1 Backg="Black" /> 
        <me:UserControl1 Backg="Green" /> 
        <me:UserControl1 Backg="Green" /> 
       </ListView.Items> 
</ListView> 

が、ちょうどこのように、仕事:

<ListView VirtualizingStackPanel.IsVirtualizing="True" 
         VirtualizingStackPanel.CleanUpVirtualizedItem="stackPanel1_CleanUpVirtualizedItem" 
         VirtualizingStackPanel.VirtualizationMode="Standard" 
         Height="239" HorizontalAlignment="Left" Name="stackPanel1" VerticalAlignment="Top" Width="133" >    

       <ListView.Items> 
        <Rectangle Width="20" Height="20" Fill="Gray" ></Rectangle> 
       <Rectangle Width="20" Height="20" Fill="Green"></Rectangle> 
       <Rectangle Width="20" Height="20" Fill="Orange"></Rectangle> 
       <Rectangle Width="20" Height="20" Fill="Blue"></Rectangle> 
       <Rectangle Width="20" Height="20" Fill="Black"></Rectangle> 
       <Rectangle Width="20" Height="20" Fill="Red"></Rectangle> 
       <Rectangle Width="20" Height="20" Fill="Gray"></Rectangle> 
       <Rectangle Width="20" Height="20" Fill="Green"></Rectangle> 
       <Rectangle Width="20" Height="20" Fill="Orange"></Rectangle> 
       </ListView.Items> 
</ListView> 

UserControl1のXAMLは、このようなものです:

<UserControl x:Class="WpfApplication3.UserControl1" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      Width="20" Height="20" 
      > 
    <Grid> 
     <Rectangle Name="internalRect" Width="20" Height="20" Fill="Black"></Rectangle> 
    </Grid> 
</UserControl> 

トンをスクロールしながら、私は、仮想化が動作されているかどうかを検出するために、イベントにCleanUpVirtualizedItemを使用彼はリストを表示すると、イベントは四角形を使用してのみトリガーされますが、UserControl1ではなく、任意のアイデアですか?

+0

なぜ私はそれが四角形のために働くか分からない、さもなければ私は答えとしてこれを掲示したでしょう。つまり、MSDNの「StackPanelの仮想化は、パネルに含まれているアイテムコントロールが独自のアイテムコンテナを作成した場合にのみ発生します」データバインディングを使用してこれを行うことができます。 VirtualizingStackPanelは、StackPanelに比べてパフォーマンス上の利点はありません。 – dowhilefor

答えて

7

あなたはどのようにを知っていますか?は長方形で動作しますか?私は本当にそれを疑う、長方形は非常に軽量です。仮想化ができないような静的アイテムを作成すると、アイテムは常に作成されます。 ItemsSourceを設定して、コントロールに項目を作成させる必要があります。そのためには、ユーザーコントロールを含むItemTemplateを設定することができます。

+0

+1は「正確に! –

関連する問題