5

我目前正在为我正在处理的应用程序创建虚拟化 TreeView 控件。我当前的实现依赖于优化的测量算法,这给我带来了一些问题。现在,在我在这里详细介绍之前,请注意我使用的是 .NET 4.0 版。

我为优化内部TreeView控件的测量所做的工作是最小化在MeasureOverride()函数中所做的工作。我已经把它归结为最基本的要素,而我现在剩下的就是在 WPF 内部深处的一个昂贵的调用。基本上在控件上调用Measure()会在子控件上应用所有模板,这非常昂贵。由于我的 TreeViewItems 都将具有定义的高度,因此在测量阶段我并不真正需要模板。有谁知道绕过ApplyTemplates()调用的方法?

这是一个示例调用堆栈

  • MyCustomControl.MeasureOverride(...)
    • ...
      • UIElement.Measure(...)
        • FrameworkElement.MeasureCore(...)
          • FrameworkElement.ApplyTemplate(...) <-- 昂贵!
4

2 回答 2

0

我不确定您能否ApplyTemplate()在特定情况下避免通话,但您不需要这样做。WPFTreeView内置了对 UI 虚拟化的支持:

<TreeView VirtualizingStackPanel.IsVirtualizing="True" />

查看此页面了解更多信息。

于 2013-09-30T17:47:08.857 回答
-1

如果您还没有解决这个问题,我有一个想法,我没有尝试过:也许您可以编写自己的面板来包含您将覆盖 MeasureOverride 的树项目,这样它就不会从包含的元素,而是自己进行计算?

于 2013-12-22T06:31:22.790 回答