Подтвердить что ты не робот

Как получить доступ к элементу шаблона управления из кода

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

  <ContentControl x:Name="MyList" >
        <ContentControl.Template>
            <ControlTemplate x:Name="MyControlTemplate">
                <Border RenderTransformOrigin="0,0" x:Name="border">
                    <UserControls:MyControl x:Name="MyControlName" Width="100" ViewModel="{Binding}" />

Я могу получить доступ к this.MyList, но он говорит this.MyControlName не найден. Как получить доступ к объекту MyControlName из кода в этой ситуации?

Спасибо!

4b9b3361

Ответ 1

Вам нужно получить шаблон и найти элемент управления по имени в шаблонном элементе управления, например:

var template = MyList.Template;
var myControl = (MyControl)template.FindName("MyControlName", MyList);

Шаблоны - это просто: абстрактные описания того, что должно быть создано, элементы управления в шаблонах существуют только в контексте чего-либо шаблонируемого.


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

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

Ответ 2

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