我目前正在为我正在处理的应用程序创建虚拟化 TreeView 控件。我当前的实现依赖于优化的测量算法,这给我带来了一些问题。现在,在我在这里详细介绍之前,请注意我使用的是 .NET 4.0 版。
我为优化内部TreeView控件的测量所做的工作是最小化在MeasureOverride()函数中所做的工作。我已经把它归结为最基本的要素,而我现在剩下的就是在 WPF 内部深处的一个昂贵的调用。基本上在控件上调用Measure()会在子控件上应用所有模板,这非常昂贵。由于我的 TreeViewItems 都将具有定义的高度,因此在测量阶段我并不真正需要模板。有谁知道绕过ApplyTemplates()调用的方法?
这是一个示例调用堆栈
- MyCustomControl.MeasureOverride(...)
- ...
- UIElement.Measure(...)
- FrameworkElement.MeasureCore(...)
- FrameworkElement.ApplyTemplate(...) <-- 昂贵!
- FrameworkElement.MeasureCore(...)
- UIElement.Measure(...)
- ...