OpenExpressApp:精通 WPF UI Virtualization

  • 时间:
  • 浏览:1
  • 来源:5分排列5官方_极速5分排列3

处置方案

《Virtualizing TreeViewItem》: 其中的最佳答案说到几个知识点:VirtualizingStackPanel 还要和 ScrollViewer 进行交互,一起,它只支持一层的 Virtualization。能才能考虑变通地使用 ListBox/ListView 来实现假的 TreeView,什么都我就能才能实现整个列表的虚拟化。

    先来看看实现 UIV 前:

更高级的自定义 UI Virtualization,能才能先参考以下几篇文章,很不错:《Virtualizing WrapPanel》、《Implementing a virtualized panel in WPF (Avalon)》、《IScrollInfo in Avalon part I》、《IScrollInfo in Avalon part II》、《IScrollInfo in Avalon part III》。

《Are there any tricks that will help me improve TreeView’s performance》:什儿 系列的文章一共3篇:《Part I》、《Part II》、《Part III》, 最后一篇说明了在如何使用 ListBox 模拟一六个 TreeView,什么都我,是因为 ListBox 有一种支持 UIVirtualization,什么都最后的 “TreeView” 也就支持了 UI Virtualization。类似于 的控件是因为一帮人传到了 CodeProject 上:《Virtualizing Tree View (VTreeView)》,其中还正好谈到了上端的这系列文章,非常凑巧的是,它还谈到了 CodeProject上被朋友系统选着来实现 TreeGrid 控件的资源:《A Versatile TreeView for WPF》。

《WPF - Virtualizing an ItemsControl》:文中指出,ItemsControl 默认不支持 UI Virtualization,是因为是它的模板中越来越 一六个 ScrollViewer。

MS 个人的相关资源:

《MSDN Control Performance》、《How to: Find a TreeViewItem in a TreeView》(如何在 UIV 的清况 下找到控件)、《Changing selection in a virtualized TreeView》

目前 WPF 中的控件在 Group 分组后是不支持 UI Virtualization 的,是因为是当 ScrollViewer.CanContentScroll 设置为 true 时,模式由 Scroll By Pixel 变为 Scroll by Item。而分组后的控件中每一六个组 GroupItem 嘴笨 什么都我一六个 Item,这时,是因为继续使用 Scroll by Item 模式,是因为得到非常差的用户体验,什么都 MS 决定不支持分组后的 UIV,ListBox 控件的默认模板涵盖一六个 Trigger 当 IsGrouping 为 True 时,设置 ConContentScroll 为 False。相关的内容参见:《UI Virtualization》。其它与分组相关的 UIV 文章如下:

有越来越 几个:

相关资源

518 条数据,生成了 18160 个 Visuals。

《WPF DataGrid Virtualization with Grouping》、《MSDN Sample Code:Grouping and Virtualization》、《Problem: ListView Virtualization》

Visuals 的数量由 1W8 降到了 60 0,当行数更多时,也就保持初始生成 60 0 个左右。拖动起来也明显地感觉到流畅了一些。

大功告成!

    其中,为了实现在列表越来越 数据时,显示 “越来越 数据” 六个字,使用了一六个 Grid 涵盖了一六个 ItemsPresenter 以及一六个 TextBlock。这段代码看上去越来越 那先 大现象,什么都搞了后后都越来越 把 UIV 调试出来,最终能才能了在网上耐心学习了很我 UIV 的相关知识。

来看看优化后的结果:

     嘴笨 ,

嘴笨 ,在处置后后看来,大现象主要出在 TreeGrid 的 Template 上,直接贴上来给朋友看看:

    最近对 OEA 的 TreeGrid 控件进行了比较大的改造,并使用新的控件来替换了系统中所有的 DataGrid 控件。新的 TreeGrid 控件实现了什么都新的功能,(以完会 写一篇文章说明),后后最后遗留了一六个大现象:是因为使用它替换了什么都我的 DataGrid,而 DataGrid 默认是支持 UI Virtualization 的,当一些界面的数据量比较大时,越来越 支持 UIV 的TreeGrid 控件就显得一些力不从心了。为了处置什儿 大现象,这7天 就看一些文章并学习了 WPF 中 UIV 的知识,在最后终于处置了,待写下此文予以记录。

一起,注意打开 TreeView 的 UIV 支持:

    本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提升 OEA 框架中 TreeGrid 控件的性能,一起,给出了一些学习 UIV 的资源。

    什么都,上端的 xaml 主要有一六个错误:

大现象

修改为以下 xaml 即可:

一篇通俗易懂的 UIV 概念文章:《UI Virtualization》,其中讲到了 WPF 及 SilverLight 中的 UIV。(它还有后续的文章:《Data virtualization》,也很不错)。

后后系统中用到的 DataGrid 控件,一旦数据被分组后后,性能异常低下。是因为嘴笨 也和 UIV 有关: