OpenExpressApp:精通 WPF UI Virtualization

  • 时间:
  • 浏览:14
  • 来源:5分快3_5分快3官方

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

有那末 有多少:

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

大功告成!

    先来看看实现 UIV 前:

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

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

MS 买车人的相关资源:

目前 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 文章如下:

    其中,为了实现在列表那末 数据时,显示 “那末 数据” 一个字,使用了另一个 多 Grid 所含了另一个 多 ItemsPresenter 以及另一个 多 TextBlock。这段代码看上去那末 哪有多少大问提,一些一些搞了以后 都那末 把 UIV 调试出来,最终只有在网上耐心学习了很我 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》。

嘴笨 ,在避免以后 看来,大问提主要出在 TreeGrid 的 Template 上,直接贴上来给我们我们儿儿看看:

《WPF - Virtualizing an ItemsControl》:文中指出,ItemsControl 默认不支持 UI Virtualization,意味着着是它的模板中没另一个 多 ScrollViewer。

同时,注意打开 TreeView 的 UIV 支持:

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

    最近对 OEA 的 TreeGrid 控件进行了比较大的改造,并使用新的控件来替换了系统中所有的 DataGrid 控件。新的 TreeGrid 控件实现了一些一些新的功能,(之都不写一篇文章说明),以后 最后遗留了另一个 多 大问提:不可能 使用它替换了另一个 多 的 DataGrid,而 DataGrid 默认是支持 UI Virtualization 的,当一些界面的数据量比较大时,那末 支持 UIV 的TreeGrid 控件就显得一些力不从心了。为了避免本身大问提,这四天看多一些文章并学习了 WPF 中 UIV 的知识,在最后终于避免了,待写下此文予以记录。

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

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

相关资源

《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》。

     嘴笨 ,

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

大问提

修改为以下 xaml 即可:

    一些一些,上边的 xaml 主要另一个 多 错误:

避免方案

来看看优化后的结果: