Как настроить таргетинг на все элементы управления (стили WPF) - PullRequest
79 голосов
/ 09 ноября 2010

Можно ли указать стиль, который применяется ко всем элементам?Я пытался

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

Но ничего не сделал

Ответы [ 2 ]

101 голосов
/ 09 ноября 2010

Созданный вами Style предназначен только для Control, а не для элементов, производных от Control. Если вы не установите x:Key, это неявно будет установлено на TargetType, так что в вашем случае x:Key="{x:Type Control}".

Нет прямого способа указать Style для всех элементов, которые являются производными от TargetType из Style. У вас есть несколько других вариантов.

Если у вас есть следующее Style

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

Вы можете выбрать все Buttons, например

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

или используйте стиль непосредственно для любого элемента, например Button

<Button Style="{StaticResource ControlBaseStyle}" ...>
2 голосов
/ 03 мая 2018

Как ответил Фредрик Хедблад, вы можете воздействовать на все элементы, унаследованные от элемента управления.

Но вы не можете применить стиль для текстового блока и кнопки с таким же стилем, например.

, чтобы сделать это:

    <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}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...