Як націлити всі елементи керування (стилі WPF)


90

Чи можу я вказати стиль, який застосовується до всіх елементів? я намагався

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

Але це нічого не зробило

Відповіді:


120

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

4
Невже це настільки безглуздо, що я повинен вказати стиль для всіх типів елементів управління, розміщених у вікні, а не лише для якоїсь загальної для всіх кореневої речі ???
Ondřej

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}"/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.