/ / Как да получа достъп до елемент от контролен шаблон от код-зад-wpf, синтаксис, потребителски контроли, код-зад

Как да осъществявам достъп до елемент от контролен шаблон от код-зад-wpf, синтаксис, потребителски контроли, код-зад

Опитвам се да вляза в контрола на потребителя, който е в контролния шаблон на контрола на съдържанието. По-конкретно:

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

Мога да имам достъп до това.Молист, но казва това.МиКонтролНамейла не е намерен. Как да получа достъп до обекта MyControlName от код-зад в тази ситуация?

Благодаря!

Отговори:

67 за отговор № 1

Трябва да получите шаблона и да намерите контрола по име на шаблонния контрол, нещо като:

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

Шаблоните са точно това: Абстрактни описания на това, което трябва да се създаде, контролите в шаблоните съществуват само в контекста на нещо, което се шаблира.


Обърнете внимание, че трябва да имате достъп само до елементите в рамките на контролен шаблон ако създавате контрола, за който е създаден шаблонът. Достъпът отвън трябва да се извършва чрез обвързани свойства и методи.

За шаблони за данни това е подобно. Всички неща, от които се нуждаете за достъп, трябва да бъдат обвързани с обект и достъпът трябва да бъде през споменатия обект. Това е особено вярно в случаите на елементи за контрол, които виртуализират елементите си, така че елементите дори не съществуват през повечето време.


6 за отговор № 2

U също може да получи контрол от всеки шаблон, като добави Loaded събитие в контрола и след това в кода зададе подател на събитието на някои променливи.