首页 > 其他分享 >WPF VirtualizingPanel 实现UI虚拟化

WPF VirtualizingPanel 实现UI虚拟化

时间:2023-11-08 23:56:55浏览次数:35  
标签:虚拟化 CacheLengthUnit VirtualizingPanel 元素 CacheLength UI WPF

当需要优化ItemsControl的性能时,使用VirtualizingPanel 。

优点是不会为面板的所有子元素创建相应的 UI 元素,而只会为显示的那些子元素创建相应的 UI 元素。

尤其是元素多的情况下,这会导致性能上的巨大差异。

VirtualizingPanel类中实现以下几项依赖属性。

  1. CacheLength/CacheLengthUnit
  2. IsContainerVirtualizable
  3. IsVirtualizing
  4. IsVirtualizingWhenGrouping
  5. ScrollUnit
  6. VirtualizationMode

CacheLength、CacheLengthUnit、IsContainerVirtualizable、IsVirtualizingWhenGrouping和ScrollUnit实际上是新的功能。

VirtualizingPanel - 简介

VirtualizingPanel从一开始就存在于 WPF 中。这提供了不必立即为可视化创建ItemsControl的所有 UI 元素的可能性。这会消耗宝贵的资源(CPU、内存),并且如果条目很多,可能需要更长时间。相反,只创建了一部分元素 - 那些实际显示的元素。

我们来看看对比耗时:

 CacheLength/CacheLengthUnit

从 WPF 4.5 开始,可以创建当前未显示的元素的缓存。为此,可以通过CacheLengthUnit 设置缓存单元。可能的有:

  • Item
  • Page
  • Pixel

此设置影响CacheLength。这现在确定了视口之前和之后的缓存大小(这是可见区域)。这样可以避免 UI 元素只在可见时才生成(这当然会对用户体验产生负面影响)。

<ListBox ItemsSource="{Binding VirtualizedBooks}"
   ItemTemplate="{StaticResource BookTemplate}"
   VirtualizingPanel.IsVirtualizing="True"
   VirtualizingPanel.CacheLength="1,2"
   VirtualizingPanel.CacheLengthUnit="Page"/>

 

IsContainerVirtualizable

可以为单个项目指定它们是否应该由VirtualizingPanel 虚拟化。默认情况下,设置值为true。

是虚拟化

到目前为止,此方法仅可用于派生类VirtualizingStackPanel(通过附加属性)。它现在也可用作VirtualizingPanel类的附加属性。

集群数据的虚拟化

在分组数据的情况下,虚拟化迄今已丢失。默认情况下仍然是这种情况,但可以通过IsVirtualizingWhenGrouping进行更改。

滚动单元

到现在为止,列表的元素总是完全显示和滚动。使用ScrollUnit现在可以配置行为。项目和像素作为选项提供。

<ListBox ItemsSource= "{Binding VirtualizedBooks}"
   temTemplate= "{StaticResource BookTemplate}"
   VirtualizingPanel.ScrollUnit= "Pixel" />

除了滚动的不同之外,在下面的屏幕截图中还可以看到另一个:

由于只有一个元素被滚动,因此可能存在空闲区域。这可以通过将ScrollUnit设置为值 Pixel 来避免,因为这也允许显示截断的元素。

 

虚拟化模式

到目前为止,此方法仅可用于派生类VirtualizingStackPanel(通过附加属性)。它现在也可用作VirtualizingPanel类的附加属性。可能的设置没有任何变化。值Standard(容器被创建并再次丢弃)和Recycling(容器被重复使用)仍然可用。

标签:虚拟化,CacheLengthUnit,VirtualizingPanel,元素,CacheLength,UI,WPF
From: https://www.cnblogs.com/ZJ-CN/p/17818601.html

相关文章

  • Required request parameter 'numbers' for method parameter type String[] is not p
    报错就是这个,然后报错的信息再给点详细的 org.springframework.web.bind.MissingServletRequestParameterException:Requiredrequestparameter'numbers'formethodparametertypeString[]isnotpresent atorg.springframework.web.method.annotation.RequestParam......
  • The following perl modules required by RepeatModeler are missing from your syste
     001、问题  RepeatModeler编译安装报错如下: 002、尝试逐个安装确实的perl模块;也是各种问题;最后不想折腾,就大力出奇迹,全安装,可一次解决所有报错;(base)[[email protected]]#yum-yinstallperl* 003、编译,测试效果:(base)[root@pc1RepeatMo......
  • WPF使用矢量图标
    阿里巴巴矢量图库https://www.iconfont.cn/选择要使用的图标加入购物车,添加至项目。资源管理➡我的项目,Unciode-下载至本地在IDE中复制xxxx.ttf文件复制到项目Fonts文件夹中,xxx.html中查看图标编号(检查文件属性是否为资源) FontFamily="./Fonts/xxxx.ttf#xxxx"<TextBlo......
  • layui下拉框可手动输入
    先看效果layui版本:[email protected]代码:<divclass="layui-form-item"><labelclass="layui-form-label">关键词:</label><divclass="layui-input-block"><!--lay-verify="required"-->......
  • vue3 使用elementUI饿了么el-table组件 动态循环自定义表头列数据
     在vue3上使用el-table组件自定义循环表头列;<el-table:data="list"v-loading="loading"border>      <!--@selection-change="handleSelectionChange"-->      <!--<el-table-columntype="selection"wi......
  • .NET 8 IEndpointRouteBuilder详解
    Map​ 经过对WebApplication的初步剖析,我们已经大致对Web应用的骨架有了一定了解,现在我们来看一下HelloWorld案例中仅剩的一条代码:app.MapGet("/",()=>"HelloWorld!");//3添加路由处理​ 老规矩,看签名:publicstaticRouteHandlerBuilderMapGet(thisIEndpointRout......
  • Spring+Druid连接池简单入门配置
    偶尔的机会解释Druid连接池,后起之秀,但是评价不错,另外由于是阿里淘宝使用过的所以还是蛮看好的。Druid集连接池,监控于一体整好复合当前项目的需要,项目是ssh结构,之前是用C3p0的,现在换一个连接池也是很简单的spring配置DataSource,配置如下:1.<beanid="dataSource"class="com.ali......
  • 使用 Flutter 构建 Facebook Clone UI
    在本教程中,我将向您展示如何使用Flutter构建FacebookCloneUI,因此这里是源代码。该项目将需要许多文件,一个用于应用程序,3个用于某些自定义小部件,因此请确保为每个组件创建一个文件main.dartimport'package:bttom_sheet/actionbtn.dart';import'package:bttom_sheet/feedbox......
  • 免费为你的PDF创建目录-QuickOutline & Quicker
    有时候我们会遇到没有目录的PDF,但在PDF中其实是存在着目录的,如何把目录页转换成可以导航的目录呢,以下介绍一种快捷的方式,为PDF增加目录1、QuickOutline使用介绍下载链接:https://lqjs.lanzouq.com/iSQoA16omngd浏览文件,选中要添加目录的PDF(或直接拖动);写入目录文本,目录文本图......
  • Burpsuite测试神器使用
    1、Web漏洞扫描是在Web信息搜集的基础上,进行更进一步的自动化的安全评估、漏洞挖掘、渗tou测试2、Web漏洞扫描能让我们进一步挖掘目标服务器潜在的sql注入、Xss跨站脚本攻鸡、CSr跨站请求伪造等漏洞3、Web漏扫虽然能够帮助我们快速的实现自动化漏洞渗tou,但是并不是全能的,也会出现误......