Como direcionar todos os controles (estilos WPF)

89

Posso especificar um estilo que se aplica a todos os elementos? eu tentei

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

Mas não fez nada

Jiew Meng
fonte

Respostas:

119

O que Stylevocê criou é apenas direcionado Controle não elementos derivados de Control. Quando você não define o, x:Keyele está implicitamente definido como o TargetType, então no seu caso x:Key="{x:Type Control}".

Não existe uma maneira direta de especificar um Styleque visa todos os elementos que derivam de TargetTypede Style. Você tem algumas outras opções.

Se você tem o seguinte Style

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

Você pode segmentar todos, Buttonspor exemplo

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

ou use o estilo diretamente em qualquer elemento, por exemplo Button

<Button Style="{StaticResource ControlBaseStyle}" ...>
Fredrik Hedblad
fonte
Eu estava me perguntando por que meu estilo com um tipo de destino FrameworkElementnão estava sendo aplicado a todos os meus controles - isso respondeu a essa pergunta!
qJake
4
É realmente uma porcaria, que eu deva especificar o estilo para todos os tipos de controles colocados na janela, não apenas para alguma coisa raiz comum para todos ???
Ondřej
7

Como Fredrik Hedblad respondeu, você pode afetar todos os elementos que herdaram do controle.

Mas você não pode aplicar estilo para bloco de texto e botão com o mesmo estilo, por exemplo.

fazer isso:

    <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
fonte