私は大きなサイズのキャンバスを持ち、多くの小さなユーザーコントロールを置いています。キャンバスの小さな部分だけが画面に表示されます。ユーザコントロールは、ViewModelにバインドされたデータであるItemsControlによって作成されます。キャンバスに多数のコントロールを選択的に読み込む方法
<Canvas Height="10000" Width="10000" Background="White" >
<ItemsControl ItemsSource="{Binding Path=MyData}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Views:MyControl />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Canvas>
ユーザコントロールの数が膨大なので、キャンバス全体を読み込むには多くの時間がかかります。私は現在、可視フレームにあるコントロールだけをロードしたい。キャンバスを移動すると、新しい可視領域の下のユーザーコントロールを読み込む必要があります。私がこれをやりたい主な理由は、多数のユーザーコントロールの読み込みに伴うパフォーマンスの遅れが原因です。私はCanvasでVirtualizingStackPanelがStackPanelに対して何をしたいのですか?
これを行う方法はありますか?
ありがとうございます。
[この](http://blogs.msdn.com/b /jgoldb/archive/2008/03/08/performant-virtualized-wpf-canvas.aspx)と[this](http://blogs.msdn.com/b/kaelr/archive/2010/08/11/zoomableapplication2- 100万件のitems.aspx)が興味深いかもしれません。 –