Cómo puedo acceder a un elemento de una plantilla de control desde dentro de code-behind


Estoy tratando de acceder a un control de usuario que está dentro de la plantilla de control de un control de contenido. Específicamente:

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

Puedo acceder a esto.Mi lista, pero dice esto.MyControlName no se encuentra. ¿Cómo puedo acceder al objeto MyControlName desde code-behind en esta situación?

Gracias!

Author: H.B., 2011-11-14

2 answers

Necesita obtener la plantilla y ubicar el control por nombre en el control con plantilla, algo así como:

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

Las plantillas son solo eso: Descripciones abstractas de lo que se va a crear, los controles en las plantillas solo existen en el contexto de algo que se está templando.


Tenga en cuenta que solo debe acceder a los elementos dentro de una plantilla de control si está creando el control para el que está destinada la plantilla. El acceso desde el exterior debe hacerse a través de bound propiedades y métodos.

Para plantillas de datos esto es similar. Todas las cosas que necesita para acceder deben estar vinculadas a un objeto y el acceso debe ser a través de dicho objeto. Esto es especialmente cierto en los casos de controles de elementos que virtualizan sus elementos, por lo que los elementos ni siquiera existen la mayor parte del tiempo.

 67
Author: H.B.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-06 18:16:29

U también puede obtener el control de cada plantilla agregando el evento cargado en control y luego en el código asignar el remitente del evento a alguna variable.

 7
Author: Dawid Jablonski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-03 10:13:49