tutorial - En WPF, ¿qué es un TemplatedParent?
wpf vs winforms (3)
Estoy intentando entender el enlace de RelativeSource pero no puedo encontrar una definición para TemplatedParent. MSDN dice:
"Obtiene un valor estático que se usa para devolver un RelativeSource construido para el modo TemplatedParent".
No aparece en el índice de "Windows Presentation Foundation Unleashed".
Simplemente, ¿qué es un TemplatedParent por favor?
En WPF, una plantilla es lo que usa para construir el árbol de un tipo. WPF esencialmente hace una copia de la plantilla cuando se crea un nuevo objeto de ese tipo.
Como resultado, dentro de la plantilla, si desea referirse al nuevo objeto, usa TemplatedParent
para un acceso rápido. De lo contrario, tendrá que usar RelativeSource
para caminar por el árbol hacia arriba para encontrar el objeto principal.
TemplatedParent
Este modo permite vincular una propiedad de ControlTemplate dada a una propiedad del control al que se aplica ControlTemplate. Para entender bien el tema aquí hay un ejemplo abajo.
<Window.Resources>
<ControlTemplate x:Key="template">
<Canvas>
<Canvas.RenderTransform>
<RotateTransform Angle="20"/>
</Canvas.RenderTransform>
<Ellipse Height="100" Width="150"
Fill="{Binding
RelativeSource={RelativeSource TemplatedParent},
Path=Background}">
</Ellipse>
<ContentPresenter Margin="35"
Content="{Binding RelativeSource={RelativeSource
TemplatedParent},Path=Content}"/>
</Canvas>
</ControlTemplate>
</Window.Resources>
<Canvas Name="Parent0">
<Button Margin="50"
Template="{StaticResource template}" Height="0"
Canvas.Left="0" Canvas.Top="0" Width="0">
<TextBlock FontSize="22">Click me</TextBlock>
</Button>
</Canvas>
Si quiero aplicar las propiedades de un control dado a su plantilla de control, entonces puedo usar el modo TemplatedParent. También hay una similar a esta extensión de marcado, que es TemplateBinding, que es una especie de mano corta de la primera, pero TemplateBinding se evalúa en tiempo de compilación en contraste con TemplatedParent, que se evalúa justo después del primer tiempo de ejecución. Como puede observar en la figura de abajo, el fondo y el contenido se aplican desde dentro del botón a la plantilla de control.
TemplatedParent
refiere a la instancia de Control
a la que se aplica la plantilla. Puede usar TemplatedParent
para enlazar a las propiedades declaradas en ese objeto (y sus clases base).