WPF 列表开启虚拟化的方式

正确开启虚拟化的方式

列表如ListBox,ListView,TreeView,GridView等,开启虚拟化

  1. ScrollViewer设置CanContentScroll=True

    • 直接在模板中,设置CanContentScroll="True"
    • 如模板中未设置CanContentScroll属性,可以在列表添加属性ScrollViewer.CanContentScroll="True"。
    • 注意:如果在模板中设置CanContentScroll="False",然后在列表中设置附加属性ScrollViewer.CanContentScroll="True",结果是无法设置成功的!究其原因,是附加属性无法更改原本已经设置了的属性值。
  2. VirtualizingPanel.IsVirtualizing="True"

其它无法开启虚拟化的原因

  • 列表样式中,设置了OverridesDefaultStyle=“True”。---覆盖了默认样式
  • 列表模板ControlTemplate中,ItemsPresenter之上没有ScrollViewer这一容器

虚拟化其它注意点

  • 滚动单元设置。VirtualizingPanel.ScrollUnit="Pixel" 像素滚动,比VirtualizingPanel.ScrollUnit="Item"物理单元滚动,列表的滚动范围更小。
  • VirtualizationMode创建可见项的项容器。VirtualizingStackPanel.VirtualizationMode="Recycling",列表绑定大数据时,显示的速度和流畅性,稍微比VirtualizationMode="Standard"快那么一点。

虚拟化滚动方式,请见我的另一博客:WPF 列表虚拟化时的滚动方式

     

关键字:虚拟化

原文地址:https://www.cnblogs.com/kybs0/p/9083132.html

时间: 2024-08-27 19:45:34

WPF 列表开启虚拟化的方式的相关文章

WPF之UI虚拟化

原文:WPF之UI虚拟化 在WPF应用程序开发过程中,大数据量的数据展现通常都要考虑性能问题.有下面一种常见的情况:原始数据源数据量很大,但是某一时刻数据容器中的可见元素个数是有限的,剩余大多数元素都处于不可见状态,如果一次性将所有的数据元素都渲染出来则会非常的消耗性能.因而可以考虑只渲染当前可视区域内的元素,当可视区域内的元素需要发生改变时,再渲染即将展现的元素,最后将不再需要展现的元素清除掉,这样可以大大提高性能. 对于ListBox,在XAML Template中加入以下属性 Scroll

使用IE9、FireFox与Chrome浏览WPF Browser Application(.XBAP)的方式

最近开始写一些WPF的小Sample和文章,但是毕竟WPF应用程式不像Silverlight那么方便的只要装个Plugin就可以透过浏览器来看执行结果,因此把脑筋动到了改用WPF Browser Application上,虽然它是WPF,但是一样可以透过浏览器来执行,这样就可以一边看文章一边看范例. 首先,来看看IE9的设定方式: 在IE9预设的设定下,是没办法正常浏览XBAP的,得要更改一下设定才行,还没更改设定之前看到的画面可能会像下图: 还好要开始这个功能非常的简单,只要点选IE9功能表的

VMware Esxi开启虚拟化嵌套/ VMware下安装KVM

VMware Esxi开启虚拟化嵌套 Vmware vsphere是否支持虚拟化嵌套,答案是肯定的. 虚拟机进行再虚拟化,对于物理资源紧缺,又有再虚拟需求的小伙伴提供了方便,但是开启虚拟化嵌套后的虚拟机性能就不敢恭维了,这种虚拟化嵌套还是适合做为测试使用. 本人环境介绍; ESXI宿主机,虚拟机版本Ubuntu14.04 具体步骤: 1.ESXI开启 ssh 和 esxi shell 2.关闭虚拟机 3.通过ssh登录ESXI主机 4.找到虚拟机所在目录 存储路径 /vmfs/volume/ v

在ECSHOP后台的订单列表中显示配送方式

熟悉ECSHOP后台的人都知道,只有点击某个具体的订单,进入订单详细页面才能看到该订单的配送方式,最模板修改的目的,是想让管理者在订单列表页面 就能看到该订单的配送方式. 下面是修改方法:首先来修改 程序文件, 打开文件 /admin/order.php 将 $sql = "SELECT o.order_id, o.order_sn, o.add_time, o.order_status, o.shipping_status, o.order_amount, o.money_paid,"

IOS开发之UI中开启动画的方式

UI中开启动画的方式 开启动画是UIImageView中的功能属性  有渐进式动画和序列帧动画 渐进式动画包括头尾式动画和block式动画 序列帧动画即为在极短时间内播放一组连续的图片所产生的动画效果 首先需要创建一个UIImageView对象为imageView1.序列帧动画基本步骤 将所要播放的图片数组赋值给UIImageView对象的animationImages属性,它就是一个数组对象 imageView.animationImages=array 设置动画的执行次数(animation

WPF使用异步+绑定的方式处理大数据量

WPF的优势在于界面处理,即使是这样,在面对大数据量的时候也免不了界面假死,同一个线程里处理界面跟大数据量,这是不可避免的.解决办法还是有的,可以使用分页显示,虚拟加载,增加条件限制... 比较好的解决办法是使用异步+绑定的方式,即绑定控件的数据源,异步获取数据.要解决界面假死,异步获取数据是很容易想到的,但是即使这样,获取到数据之后再设置控件的数据源,这又是一个耗时的过程,所以需要绑定.如果有ViewModel(前提是实现了INotifiPropertyChanged)那就更好了,直接设置属性

在WPF中开启摄像头扫描二维码(Media+Zxing)

原文:在WPF中开启摄像头扫描二维码(Media+Zxing) 近两天项目中需要添加一个功能,是根据摄像头来读取二维码信息,然后根据读出来的信息来和数据库中进行对比显示数据. 选择技术Zxing.WPFMediaKit.基本的原理就是让WPFmediaKit来对摄像头进行操作,然后Zxing这个库对图片进行分析大致就是这样. 在后台中定义了定时器,用于解析当前摄像头的图像,然后直接读数据. 需要注意的是一定要引入 using WPFMediaKit.DirectShow.Controls; us

WPF的UI虚拟化

许多时候,我们的界面上会呈现大量的数据,如包含数千条记录的表格或包含数百张照片的相册.由于呈现UI是一件开销比较大的动作,一次性呈现数百张照片就目前的电脑性能来说是需要占用大量内存和时间的.因此需要对其进行优化.以前采用的方案大多数是翻页,翻页在某种程度上造成用户浏览的中断,因此现在往往采用一种新的方案——UI虚拟化. UI虚拟化的原理是:但是由于显示器和人眼的限制,用户往往只会同时看到其中的数十条数据,因此只要在界面上渲染用户所看到的那些数据即可,对于用户呈现的界面仍然是一样的.微软的MSDN

获取系统当前的输入法列表并通过编程方式切换输入法

1.获取输入法列表 //保存输入法信息的结构     struct _tagInputMethod     {      char szLanguageId[30];      char szLanguageName[100];      char szLanguageImeFileName[100];      HICON hIcon;     }; _tagInputMethod m_InputMethodList[30];     int m_InputMethodCount; //获取输