Как настроить таргетинг на все элементы управления (стили WPF)

92

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

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

Но это ничего не дало

Jiew Meng
источник

Ответы:

122

Созданный 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}" ...>
Фредрик Хедблад
источник
Мне было интересно, почему мой стиль с целевым типом FrameworkElementне применялся ко всем моим элементам управления - это ответило на этот вопрос!
qJake
5
Неужели это так ужасно, что я должен указывать стиль для всех типов элементов управления, размещенных в окне, а не только для какой-то общей для всех корневой вещи ???
Ондржей
7

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

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

для этого:

    <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
источник