Как получить доступ к элементу шаблона управления из-за кода - PullRequest
40 голосов
/ 14 ноября 2011

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

  <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}" />

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

Спасибо!

Ответы [ 2 ]

74 голосов
/ 14 ноября 2011

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

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

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


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

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

8 голосов
/ 03 февраля 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...