我在页面上放了一个扩展器。在扩展器中有一个标签。加载页面后,扩展器尚未展开。在这一点上,我使用VisualTreeHelper检查了扩展器,我得到了如下结构:
Expander
Border
DockPanel
ToggleButton
Border
Grid
Ellipse
Ellipse
Path
ContentPresenter
ContentPresenter其中在最后一个ContentPresenter下没有标签。
然而,一旦扩展器被展开然后折叠,我使用VisualTreeHelper得到了一个不同的结构:
Expander
Border
DockPanel
ToggleButton
Border
Grid
Ellipse
Ellipse
Path
ContentPresenter
ContentPresenter
Label
Border
ContentPresenter这一次,标签出现在ContentPresenter下。
似乎只要扩展器已经展开,VisualTreeHelper就会知道扩展器中的内容。但是,有没有可能让VisualTreeHelper知道Expander的内容而不对其进行扩展呢?
谢谢。
发布于 2010-07-05 13:14:44
有一种方法可以强制控件以编程方式加载其内容。
我假设你有某种递归循环来搜索你的元素。在调用获取其子对象之前,请使用以下调用:
if (element is FrameworkElement)
(element as FrameworkElement).ApplyTemplate()这将迫使它应用其模板并将控件加载到内存中。我认为这样做是出于性能原因,因为控件通常在可见之前是不需要的。
我相信,这种方法也适用于TabControl和任何其他可以隐藏内容的控件。
功劳归功于陶亮,他在here上发布了这个解决方案。如果你的递归循环有问题,也要读一读。
https://stackoverflow.com/questions/3175158
复制相似问题