2011-01-12 9 views
15

Esta pregunta probablemente sea un duplicado, pero no pude encontrarla en SO.Aplicación de un estilo WPF a varios controles

Si tengo un contenedor Window, StackPanel, Grid, etc. ¿hay alguna manera de que pueda aplicar una Style a todos los mandos de un determinado tipo, que están contenidos dentro de él?

puedo aplicar los cambios de propiedad, mediante el uso de Container.Resources y el establecimiento de cambios individuales a un TargetType, pero cuando traté de establecer la Style del objetivo, me sale un error, me dice que no puedo establecer Style.

¿Hay alguna manera de hacer esto en XAML?

Respuesta

28

Más o menos, dependiendo de lo que intente establecer. Si las propiedades son propiedades de una clase base común, entonces sí, puedes. También tiene más opciones en WPF que Silverlight porque puede heredar estilos. Por ejemplo ...

<Window.Resources> 
    <Style x:Key="CommonStyle" TargetType="FrameworkElement"> 
     <Setter Property="Margin" Value="2" /> 
    </Style> 
    <Style TargetType="StackPanel" BasedOn="{StaticResource CommonStyle}"> 
    </Style> 
    <Style TargetType="Grid" BasedOn="{StaticResource CommonStyle}"> 
    </Style> 
    <Style TargetType="Button" BasedOn="{StaticResource CommonStyle}"> 
     <Setter Property="Background" Value="LimeGreen" /> 
    </Style> 
</Window.Resources> 

El estilo común, CommonStyle sería heredado por los 3 estilos implícitos. Pero solo puede especificar las propiedades que son comunes a todas las clases de FrameworkElement. No se pudo establecer el fondo en CommonStyle porque FrameworkElement no proporciona una propiedad de fondo. Así que aunque Grid y StackPanel tienen Background (heredado del Panel) no es la misma propiedad Background que Button (heredada de Control).

Espero que esto ayude a seguir su camino.

+0

Genial, eso es lo que necesito, gracias. – ocodo

+8

Si un estilo no tiene un campo de clave x: se aplicará a * todos * los objetos de ese tipo. Entonces * all * StackPanels, Grids & Buttons tendrán ese margen. – DefenestrationDay

+0

Gracias @DefenestrationDay !!! –

Cuestiones relacionadas