Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何使Expander的内容对VisualTreeHelper可见_Wpf_Expander - Fatal编程技术网

Wpf 如何使Expander的内容对VisualTreeHelper可见

Wpf 如何使Expander的内容对VisualTreeHelper可见,wpf,expander,Wpf,Expander,我在一页上放了一个扩展器。扩展器内有一个标签。加载页面后,扩展器尚未展开。此时,我使用VisualTreeHelper检查扩展器,得到如下结构: Expander Border DockPanel ToggleButton Border Grid Ellipse Ellipse Path Content

我在一页上放了一个扩展器。扩展器内有一个标签。加载页面后,扩展器尚未展开。此时,我使用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的内容呢


谢谢。

有一种方法可以强制控件以编程方式加载其内容

我想象你有某种递归循环,它搜索你的元素。在调用以获取其子项之前,请使用以下调用:

if (element is FrameworkElement)
     (element as FrameworkElement).ApplyTemplate()
这将迫使它应用其模板并将控件加载到内存中。我认为这样做是出于性能原因,因为控件在可见之前通常不需要

我相信,这种方法也适用于
TabControl
和任何其他可以隐藏内容的控件


这要归功于Tao Liang,他将此解决方案发布了一遍。如果在递归循环中遇到问题,也可以阅读它。

有一种方法可以强制控件以编程方式加载其内容

我想象你有某种递归循环,它搜索你的元素。在调用以获取其子项之前,请使用以下调用:

if (element is FrameworkElement)
     (element as FrameworkElement).ApplyTemplate()
这将迫使它应用其模板并将控件加载到内存中。我认为这样做是出于性能原因,因为控件在可见之前通常不需要

我相信,这种方法也适用于
TabControl
和任何其他可以隐藏内容的控件

这要归功于Tao Liang,他将此解决方案发布了一遍。如果递归循环遇到问题,也请阅读