У меня Canvas большого размера и над ним расположено множество маленьких пользовательских элементов управления.В то время только небольшая часть холста видна на экране.Пользовательские элементы управления создаются 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.
Есть ли способ сделать это?
Спасибо за помощь