首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使扩展器的内容对VisualTreeHelper可见

如何使扩展器的内容对VisualTreeHelper可见
EN

Stack Overflow用户
提问于 2010-07-04 23:26:02
回答 1查看 1.1K关注 0票数 0

我在页面上放了一个扩展器。在扩展器中有一个标签。加载页面后,扩展器尚未展开。在这一点上,我使用VisualTreeHelper检查了扩展器,我得到了如下结构:

代码语言:javascript
复制
  Expander
    Border
      DockPanel
        ToggleButton
          Border
            Grid
              Ellipse
              Ellipse
              Path
              ContentPresenter
        ContentPresenter

其中在最后一个ContentPresenter下没有标签。

然而,一旦扩展器被展开然后折叠,我使用VisualTreeHelper得到了一个不同的结构:

代码语言:javascript
复制
  Expander
    Border
      DockPanel
        ToggleButton
          Border
            Grid
              Ellipse
              Ellipse
              Path
              ContentPresenter
        ContentPresenter
          Label
            Border
              ContentPresenter

这一次,标签出现在ContentPresenter下。

似乎只要扩展器已经展开,VisualTreeHelper就会知道扩展器中的内容。但是,有没有可能让VisualTreeHelper知道Expander的内容而不对其进行扩展呢?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-05 13:14:44

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

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

代码语言:javascript
复制
if (element is FrameworkElement)
     (element as FrameworkElement).ApplyTemplate()

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

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

功劳归功于陶亮,他在here上发布了这个解决方案。如果你的递归循环有问题,也要读一读。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3175158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档