WPF中的虚拟化
- WPF中的虚拟化技术是一种能够提升界面性能的一种技术,尤其是对一些展示大量数据的控件有用(如 ListBox、ListView、ItemsControl)
- 虚拟化的原理比较简单:
只创建并渲染当前可见区域中的元素,对于那些未出现在视口中的项,不创建 UI 元素,也不参与布局和渲染,从而减少内存消耗和提高性能。 
- 虚拟化通常依赖 VirtualizingStackPanel来实现。默认情况下,像ListBox、ListView使用的ItemsPanel是VirtualizingStackPanel(垂直排列)。这一点在你自己重写的控件的Template的时候会发现,如同下面这样:1 <ListBox ItemsSource="{Binding LargeData}"> 2 <ListBox.ItemsPanel> 3 <ItemsPanelTemplate> 4 <VirtualizingStackPanel/> 5 </ItemsPanelTemplate> 6 </ListBox.ItemsPanel> 7 </ListBox> 当用户滚动时, VirtualizingStackPanel会根据滚动偏移判断哪些项应显示,只为这些项创建Container(通常是ListBoxItem或ListViewItem)。
- 
一般情况下虚拟化是默认开启的,除非你手动设置了ScrollViewer.CanContentScroll="False"或者是VirtualizingStackPanel.IsVirtualizing="False"; 
- 
虚拟化默认开启的前提是: 
- 使用了ItemsControl(如ListBox)
- 使用了VirtualizingStackPanel(wpf中唯一你能使用的虚拟化面板,你可以通过继承VirtualizingPanel来实现其他排列方式的虚拟化面板)
- 滚动由 ScrollViewer控制(内置或外部)
- CanContentScroll="True"
- 不使用复杂布局(如 WrapPanel,Grid),如果你的项是自定义的用户控件,那么你需要关注虚拟化可能无效的问题。
6.ScrollViewer.CanContentScroll,这个属性为False的时候表示关闭逻辑滚动,VirtualizingStackPanel.IsVirtualizing="False"表示关闭虚拟化的功能。
7.如果你是使用原生控件,并且对效率有更高的要求,你可以手动指定虚拟化的模式 VirtualizingStackPanel.VirtualizationMode="Recycling",当你设置模式为Recycling,wpf除了给你生成显示区域的元素之外,还会重用已经滑出视野的元素容器。这样会使你的程序内存和效率都更佳。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号