2012-01-10 88 views
2

我有一个WPF应用程序,我显示并隐藏大量的UserControl对象。 XAML代码如下所示:缓存UserControl对象

<ItemsControl ItemsSource="{Binding Path=MyListOfStuff}" > 
    <Controls:MyControl Stuff="{Binding}"/> 
</ItemsControl> 

创建这些对象需要很长时间。分析显示'InitializeComponent'需要大量的MyControl对象。我想预先创建这些对象以减少这个时间。我怎样才能做到这一点?我仍然需要xaml代码,并且不想仅用代码来替换它。

无法使用虚拟化,因为列表中的项有时比视图大,所以CanContentScroll必须为False。

+3

看看这个:http://stackoverflow.com/questions/2783845/wpf-virtualizing-an-itemscontrol虽然我不确定是否virualizing会帮助你的情况,因为你显示和隐藏不滚动。 – Ray 2012-01-10 14:12:17

+0

查看http://stackoverflow.com/questions/22218506/wpf-canvas-based-itemscontrol-with-minimum-recycled-items/22220980#comment33743843_22220980 CachingItemsControl实现 – 2014-03-07 10:21:23

回答

1

可以在WPF中进行UI缓存,但我确定它不是你正在寻找的。

当一个视觉被多次绘制时,位图缓存是非常有用的,所以它只被渲染一次,后续渲染只能从缓存中复制。

你将不得不看看虚拟化(参见Shoaib的回答)。

Article about bitmap caching