OpenExpressApp:精通 WPF UI Virtualization

  • 时间:
  • 浏览:3
  • 来源:uu直播快3_UU快3直播平台

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

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

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

MS 另一个人的相关资源:

    许多许多,中间的 xaml 主要三个小多错误:

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

《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,还还要先参考以下几篇文章,很不错:《Virtualizing WrapPanel》、《Implementing a virtualized panel in WPF (Avalon)》、《IScrollInfo in Avalon part I》、《IScrollInfo in Avalon part II》、《IScrollInfo in Avalon part III》。

    先来看看实现 UIV 前:

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

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

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

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

正确处理方案

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

    其中,为了实现在列表这麼 数据时,显示 “这麼 数据” 三个小字,使用了三个小 Grid 蕴含了三个小 ItemsPresenter 以及三个小 TextBlock。这段代码看上去这麼 你一种生活大难题,许多许多搞了日后 都这麼 把 UIV 调试出来,最终这麼 在网上耐心学习了很我 UIV 的相关知识。

有这麼 有几个:

大难题

相关资源

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

修改为以下 xaml 即可:

     嘴笨 ,

嘴笨 ,在正确处理日后看来,大难题主要出在 TreeGrid 的 Template 上,直接贴上来给我们我们我们 看看:

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

大功告成!

    最近对 OEA 的 TreeGrid 控件进行了比较大的改造,并使用新的控件来替换了系统中所有的 DataGrid 控件。新的 TreeGrid 控件实现了许多许多新的功能,(之一定会写一篇文章说明),日后 最后遗留了三个小大难题:意味着使用它替换了三个小的 DataGrid,而 DataGrid 默认是支持 UI Virtualization 的,当许多界面的数据量比较大时,这麼 支持 UIV 的TreeGrid 控件就显得许多力不从心了。为了正确处理你一种生活大难题,这十天 看多许多文章并学习了 WPF 中 UIV 的知识,在最后终于正确处理了,待写下此文予以记录。

来看看优化后的结果: