Wpf 如何使Expander的内容对VisualTreeHelper可见
我在一页上放了一个扩展器。扩展器内有一个标签。加载页面后,扩展器尚未展开。此时,我使用VisualTreeHelper检查扩展器,得到如下结构:Wpf 如何使Expander的内容对VisualTreeHelper可见,wpf,expander,Wpf,Expander,我在一页上放了一个扩展器。扩展器内有一个标签。加载页面后,扩展器尚未展开。此时,我使用VisualTreeHelper检查扩展器,得到如下结构: Expander Border DockPanel ToggleButton Border Grid Ellipse Ellipse Path Content
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的内容呢
谢谢。有一种方法可以强制控件以编程方式加载其内容 我想象你有某种递归循环,它搜索你的元素。在调用以获取其子项之前,请使用以下调用:
if (element is FrameworkElement)
(element as FrameworkElement).ApplyTemplate()
这将迫使它应用其模板并将控件加载到内存中。我认为这样做是出于性能原因,因为控件在可见之前通常不需要
我相信,这种方法也适用于TabControl
和任何其他可以隐藏内容的控件
这要归功于Tao Liang,他将此解决方案发布了一遍。如果在递归循环中遇到问题,也可以阅读它。有一种方法可以强制控件以编程方式加载其内容 我想象你有某种递归循环,它搜索你的元素。在调用以获取其子项之前,请使用以下调用:
if (element is FrameworkElement)
(element as FrameworkElement).ApplyTemplate()
这将迫使它应用其模板并将控件加载到内存中。我认为这样做是出于性能原因,因为控件在可见之前通常不需要
我相信,这种方法也适用于TabControl
和任何其他可以隐藏内容的控件
这要归功于Tao Liang,他将此解决方案发布了一遍。如果递归循环遇到问题,也请阅读