Я видел решения очень похожей проблемы, но она не переводит на мою. (А именно эта статья: http://blogs.msdn.com/wpfsdk/archive/2007/04/16/how-do-i-programmatically-interact-with-template-generated-elements-part-ii.aspx)
Мой ItemsControl привязан к наблюдаемой коллекции, в которую можно динамически добавлять элементы.
Когда я добавляю элемент в наблюдаемую коллекцию, шаблонный элемент правильно отображается в моем элементе управления, но я не могу понять, как получить к нему доступ. Мой наблюдаемый сборник изменил код, о котором я пытаюсь получить доступ. Я использую пользовательский DataTemplateSelector для возврата одного из 3 различных dataTemplates, основанных на данных элемента в коллекции.
Вот схема моего ItemsControl XAML:
<ItemsControl Name="myItemsControl" ItemTemplateSelector="{StaticResource myTempSelector}">
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<ItemsPresenter/>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Решения, которые я видел, предлагают использовать ItemContainerGenerator.ContainerFromItem(xxx)
В этих примерах они всегда ищут информацию о ListBox или ComboBox (которые наследуются от ContentControl). Однако когда я вызываю (в моем коде) myItemsControl.ItemContainerGenerator.ContainerFromItem(xxx)
, я получаю ContentPresenter, а не ожидаемый ContentControl.
Затем, когда я пытаюсь получить доступ к ContentTemplate этого ContentPresenter, я получаю исключение нулевого объекта.
У меня есть предчувствие, что остальные мои проблемы происходят оттуда.
Все, что я хочу сделать, - это найти текстовое поле из таблицы данных в моем недавно созданном элементе управления и выделить его.
Помощь! : -)