Что вы делаете неправильно?
Я бы сказал что вы делаете неправильно, пытаясь получить доступ к элементам внутри шаблона данных из кода. Непослушный, непослушный!
Если не считать шуток, то в 99,9% случаев я вижу, как кто-то пытается получить доступ к элементу внутри DataTemplate из кода, это потому, что его приложение плохо спроектировано, без (или нескольких) привязок и вообще без модели представления.Многие новички склонны хранить свои данные непосредственно в элементах пользовательского интерфейса, а не использовать модель представления.Я думаю, это потому, что их умы были испорчены опытом VB, WinForms и ASP.NET, где это был «нормальный» способ сделать это.Существует тысяча причин использовать модель представления и связывать свои данные вместо хранения их в элементах пользовательского интерфейса.Посмотрите "модель представления модели" онлайн для получения более подробной информации.
Теперь, чтобы ответить на ваш вопрос:
Любой данный ListBoxItem может иметь только один DataTemplate одновременно.Это потому, что его ContentPresenter имеет только одно свойство ContentTemplate, и это свойство не может иметь два разных значения.
Из-за этого визуальное дерево в ListBoxItem всегда будет генерироваться из одного конкретного шаблона, а не из комбинациинесколько шаблонов.Если вы измените ItemTemplate объекта ListBox или иным образом обновите ListBoxItem.ContentTemplate, визуальное дерево, созданное старым шаблоном, будет отброшено, а новое построено.
Позвольте мне сказать это еще раз: если вы изменяете шаблоны данных, визуальное дерево, созданное старым шаблоном данных, будет отброшено, а новое визуальное дерево построено .
Вы можете иметь сотню шаблонов данных, определенных и используемых для данного ListBoxItem, но толькопо одному может быть создано для него визуальное дерево.И это единственные элементы, которые на самом деле существуют как часть визуального дерева.Все остальные шаблоны существуют только в качестве шаблонов - для них не создано ни одного фактического элемента.
Другими словами: бессмысленно задавать вопросы о том, как найти элементы в двух разных визуальных деревьях, созданных двумя разными шаблонами.тот же элемент управления, потому что один элемент управления не может иметь два разных активных шаблона одновременно.
Надеюсь, это прояснит ситуацию для вас.
Итоговый совет: прочитайте MVVM и остановитесьпытаясь получить доступ к элементам внутри DataTemplates как можно скорее.Однако, если вы считаете, что у вас могут быть те 0,1%, у которых действительно есть веские причины для доступа к элементам внутри шаблонов, напишите свою реальную причину желания сделать это, и, возможно, я смогу дать дальнейшие рекомендации.