wpf scrollviewer的虚拟化失效问题

今天遇到个问题,加载多条数据时,界面卡顿,原始代码,大致如下:

  
                          
             
        

后来尝试加上虚拟化相关设置发现,没起作用


          
                
                    
                        
                    
                 
             
        

最后的修改方案是把scrollviewer 写到ItemsControl.Template中去,才生效。 

 
            
                
                    
                
            
            
                
                    
                        
                    
                
            
        

补充


            
                
                    
                        
                    
                
                
                    
                        
                            
                        
                    
                
            
        

如果外面在嵌套一层scrollviewer 发现加载也会变得很慢。究其原因,是因为内层的scrollviewer没有设置最高上限,导致所有的数据项都加载出来了。 可以通过VerticalScrollBarVisibility="Visible" 设置(设置成Auto发现,里面的滚动条永远不会显示出来),将其显示出来,发现里面的滚动条是把所有的数据都加载出来了。

wpf scrollviewer的虚拟化失效问题_第1张图片

修改方法就是设置里面一层scrollviewer的maxheight,然后就不会出现界面卡顿的现象了。

附上完整的代码

 
        
            
            
        
        
            
            
        
        
            
                
                    
                        
                    
                
                
                    
                        
                            
                            
                        
                    
                
            
        
        
        
            
                
                    
                
            
            
                
                    
                        
                    
                
            
        
        
        
   public partial class Window1 : Window
    {
        List intList = new List();
        public Window1()
        {
            InitializeComponent();
            for (int i = 0; i < 100000; i++)
                intList.Add(i);
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            itemsControl1.ItemsSource = intList;
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            itemsControl2.ItemsSource = intList;
        }
    }

 

你可能感兴趣的:(wpf,wpf,scrollviewer虚拟化)