Jak kierować wszystkie kontrolki (style WPF)

90

Czy mogę określić styl, który dotyczy wszystkich elementów? próbowałem

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

Ale to nic nie dało

Jiew Meng
źródło

Odpowiedzi:

120

Utworzony przez StyleCiebie jest tylko cel, Controla nie elementy, które pochodzą z Control. Jeśli nie ustawisz, jest x:Keyto niejawnie ustawione na TargetType, więc w twoim przypadku x:Key="{x:Type Control}".

Nie ma żadnego bezpośredniego sposobu na podanie Style, że cele wszystkie elementy, które wywodzą się z TargetTypez Style. Masz inne możliwości.

Jeśli masz następujące Style

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

Możesz Buttonsna przykład kierować reklamy do wszystkich

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

lub użyj stylu bezpośrednio na dowolnym elemencie, np Button

<Button Style="{StaticResource ControlBaseStyle}" ...>
Fredrik Hedblad
źródło
Zastanawiałem się, dlaczego mój styl z docelowym typem FrameworkElementnie jest stosowany do wszystkich moich elementów sterujących - to odpowiedź na to pytanie!
qJake,
4
Czy to naprawdę takie gówniane, że muszę określić styl dla wszystkich typów kontrolek umieszczonych w oknie, a nie tylko dla jakiegoś głównego elementu wspólnego dla wszystkich ??
Ondřej
7

Jak odpowiedział Fredrik Hedblad, możesz wpływać na wszystkie elementy odziedziczone po kontroli.

Ale nie możesz na przykład zastosować stylu do bloku tekstowego i przycisku w tym samym stylu.

aby to zrobić:

    <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
źródło