我有一个大尺寸的 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>
现在由于用户控件的数量很大,加载整个画布需要很长时间。我只想加载当前可见框架中的那些控件。如果我移动画布,则应加载新可见区域下的用户控件。我想这样做的主要原因是与加载大量用户控件相关的性能滞后。我想在 Canvas 中完成 VirtualizingStackPanel 对 StackPanel 所做的事情。
有没有办法做到这一点?
谢谢您的帮助