Me lo he estado preguntando desde que empecé a usar ejemplos de plantillas de control de MS como base para crear controles personalizados.¿Por qué definir una Plantilla dentro de un Estilo en xaml, WPF?
tomar el ejemplo Label por ejemplo: http://msdn.microsoft.com/en-us/library/ms752327.aspx
por qué en la tierra es que define así:
<Style x:Key="{x:Type Label}" TargetType="Label">
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="VerticalContentAlignment" Value="Top" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Border>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="True" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{DynamicResource DisabledForegroundColor}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
y no como esto directamente:
<ControlTemplate x:Key="{x:Type Label}" TargetType="Label">
<Border>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
RecognizesAccessKey="True" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{DynamicResource DisabledForegroundColor}" />
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
y luego llamado como una plantilla directamente y no a través de la propiedad de estilo?
¿Hay alguna razón oculta que no veo para hacer cosas como esta? o es solo una forma de hacer las cosas y eso es todo?
(NB: no me digas que esto es debido a los emisores de alineación horizontal y vertical que todos sabemos que esos son los valores por defecto para una etiqueta y esto es básicamente inútil si mantiene esos valores)
oy, pensé que funcionaba igual para plantillas y estilos. Lo intentaré solo para verlo con mis propios ojos (no puedo creer que esos 2 actúen de forma diferente ...) en cuanto a la segunda parte de tu respuesta, tengo que estar en desacuerdo (ya viste mi otra pregunta sobre el tema) . Todavía no he encontrado una explicación válida para el comportamiento que estoy obteniendo, pero quitar la tecla x: no siempre funciona como debería (al menos para mí ...) – David
Está hecho específicamente para estilos, que si no se define el estilo para un control, recorrerá el árbol visual hasta que encuentre una definición de estilo con x: clave igual a su propio tipo, y luego aplicará ese estilo a sí mismo. La misma lógica no se implementa para las plantillas (o cualquier otro tipo de recursos para el caso), por lo que no es realmente tan extraño;) –
bien, lo vi con mis propios ojos. Debería haberlo intentado antes de preguntar en realidad. De hecho, es incluso peor que eso: después de compilar, aparece un error que dice que es imposible incluir un Estilo en una Plantilla de Control. Entonces esto tiene sentido con lo que escribiste. Pensé que esto funcionaría tanto para las plantillas como para los estilos ... (¿por qué no?) – David