【问题标题】:How to make the content of Expander visible to VisualTreeHelper如何使 Expander 的内容对 VisualTreeHelper 可见
【发布时间】:2010-07-04 15:26:01
【问题描述】:

我在页面上放置了一个扩展器。在扩展器中有一个标签。页面加载后,扩展器尚未展开。此时,我使用 VisualTreeHelper 检查 Expander,我得到了这样的结构:

  Expander
    Border
      DockPanel
        ToggleButton
          Border
            Grid
              Ellipse
              Ellipse
              Path
              ContentPresenter
        ContentPresenter

最后一个 ContentPresenter 下没有 Label。

但是,一旦展开器展开然后折叠,我使用 VisualTreeHelper 得到了不同的结构:

  Expander
    Border
      DockPanel
        ToggleButton
          Border
            Grid
              Ellipse
              Ellipse
              Path
              ContentPresenter
        ContentPresenter
          Label
            Border
              ContentPresenter

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

看来只要扩展器被扩展,VisualTreeHelper 就会知道扩展器内的内容。但是有没有一种方法可以让 VisualTreeHelper 知道 Expander 的内容而不展开它?

谢谢。

【问题讨论】:

    标签: wpf expander


    【解决方案1】:

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

    我想你有某种递归循环来搜索你的元素。在你调用它的孩子之前,使用这个调用:

    if (element is FrameworkElement)
         (element as FrameworkElement).ApplyTemplate()
    

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

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

    感谢在here 上发布此解决方案的陶亮。如果您在递归循环方面遇到问题,也请阅读它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 2011-11-17
      • 2023-02-23
      相关资源
      最近更新 更多