Я думаю, что полный ответ на этот вопрос влечет за собой полную серию DrWPF ItemsControl: от A до Z .Тем не менее, я полагаю, что суть заключается в том, где визуальные элементы хранятся, когда DataTemplate «раздувается» для отображения элемента данных, с которым он был связан платформой.
В разделе Введение в шаблоны управления в "ItemsControl: 'L' для Lookless" DrWPF объясняет, что "мы уже узнали, что DataTemplate используется для объявления визуального представленияэлемента данных, который появляется в логическом дереве приложения. В «P» для Panel мы узнали, что ItemsPanelTemplate используется для объявления узла элементов, используемого в ItemsControl. "
Что касается моей проблемы, я все ещене удалось успешно перемещаться по визуальному дереву, чтобы получить ссылку на мой элемент сплиттера.Это моя лучшая попытка:
// w1 is a Window
SuperTabControlEx stc = w1.FindName("superTabControl1") as SuperTabControlEx;
//SuperTabItem sti = (SuperTabItem)(stc.ItemContainerGenerator.ContainerFromItem(stc.Items.CurrentItem));
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(stc);
//ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(sti);
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
Приведенный выше код является попыткой реализовать методы, показанные на веб-сайте msdn .Однако, когда я применяю его к своему коду, все выглядит хорошо, за исключением того, что myDataTemplate возвращается null.Как вы можете видеть, я попробовал ту же технику на SuperTabControlEx и SuperTabItem, полученных из TabControl и TabItem, соответственно.Как описано в моем первоначальном посте и очевидно из фрагмента XAML, SuperTabControlEx также реализует код из Сохранение элемента управления вкладки WPF от уничтожения его дочерних элементов .
На данный момент, возможно, более всегоиначе, я думаю, что это упражнение в навигации по дереву визуалов.Я собираюсь изменить название вопроса, чтобы отразить мои новые концепции проблемы.