Как сделать содержимое Expander видимым для VisualTreeHelper - PullRequest
0 голосов
/ 04 июля 2010

Я поместил Expander на страницу.Внутри расширителя есть Метка.После загрузки страницы расширитель еще не развернут.На этом этапе я проверяю Expander с помощью 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 будет знать содержимое в Expander.Но есть ли возможный способ заставить VisualTreeHelper быть в курсе содержимого Expander без его расширения?

Спасибо.

1 Ответ

4 голосов
/ 05 июля 2010

Существует метод, заставляющий элемент управления загружать его содержимое программным способом.

Я предполагаю, что у вас есть какой-то рекурсивный цикл, который просматривает ваши элементы.Прежде чем звонить, чтобы получить его потомков, используйте этот вызов:

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

Это заставит его применить свой шаблон и загрузить элементы управления в память.Я полагаю, что это делается из соображений производительности, поскольку элементы управления обычно не нужны, пока они не видны.

Этот подход также работает для TabControl и любого другого элемента управления, который может скрывать содержимое, я считаю.

Благодарность предоставляется Тао Ляну, который разместил это решение более здесь .Прочтите также, если у вас возникли проблемы с рекурсивным циклом.

...