大きなサイズのCanvasと、その上に配置された多くの小さなユーザーコントロールがあります。一度に、キャンバスのごく一部だけが画面に表示されます。ユーザーコントロールは、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>
現在、ユーザーコントロールの数が非常に多いため、キャンバス全体をロードするのに多くの時間がかかります。現在表示されているフレームにあるコントロールのみをロードしたい。キャンバスを移動すると、新しい表示領域の下にあるユーザーコントロールが読み込まれるはずです。これを実行したい主な理由は、多数のユーザーコントロールのロードに関連するパフォーマンスの遅れのためです。VirtualizingStackPanelがStackPanelに対して行うことをCanvasで実行したいと思います。
それを行う方法はありますか?
助けてくれてありがとう