Cómo apuntar a todos los controles (estilos WPF)

90

¿Puedo especificar un estilo que se aplique a todos los elementos? Lo intenté

<Style TargetType="Control">
    <Setter Property="Margin" Value="0,5" />
</Style>

Pero no hizo nada

Jiew Meng
fuente

Respuestas:

120

El Styleque creó es solo la orientación Controly no los elementos que se derivan de Control. Cuando no configura el x:Key, está implícitamente configurado como TargetType, por lo que en su casox:Key="{x:Type Control}" .

No hay ninguna forma directa de especificar un Styleque se dirija a todos los elementos que se derivan del TargetTypede Style. Tienes otras opciones.

Si tiene lo siguiente Style

<Style x:Key="ControlBaseStyle" TargetType="{x:Type Control}">
    <Setter Property="Margin" Value="50" />
</Style>

Puede apuntar a todos, Buttonspor ejemplo

<Style TargetType="{x:Type Button}" BasedOn="{StaticResource ControlBaseStyle}"/>

o use el estilo directamente en cualquier elemento, p. ej. Button

<Button Style="{StaticResource ControlBaseStyle}" ...>
Fredrik Hedblad
fuente
Me preguntaba por qué mi estilo con un tipo de objetivo FrameworkElementno se estaba aplicando a todos mis controles, ¡esto respondió a esa pregunta!
qJake
4
¿Es realmente tan malo que debo especificar el estilo para todos los tipos de controles colocados en la ventana, no solo para alguna raíz común para todos?
Ondřej
7

Como respondió Fredrik Hedblad, puede afectar todos los elementos heredados del control.

Pero no puede aplicar estilo para bloque de texto y botón con el mismo estilo, por ejemplo.

Para hacer eso:

    <Style x:Key="DefaultStyle" TargetType="{x:Type FrameworkElement}">
        <Setter Property="Control.Margin" Value="50"/>
    </Style>
    <Style TargetType="TextBlock" BasedOn="{StaticResource DefaultStyle}"/>
    <Style TargetType="Button" BasedOn="{StaticResource DefaultStyle}"/>
qazwsx123
fuente