Применение стиля WPF к нескольким элементам управления - PullRequest
20 голосов
/ 13 января 2011

Этот вопрос, вероятно, дубликат, но я не смог найти его на SO.

Если у меня есть контейнер Window, StackPanel, Grid и т. Д., Есть ли способ применить Style ко всем элементам управления определенного типа, содержащимся в нем?

Я могу применить изменения свойств, используя Container.Resources и установив индивидуальные изменения на TargetType, но когда я попытался установить Style цели, я получаю сообщение об ошибке, сообщая, что не могу установить Style.

Есть ли способ сделать это в XAML?

1 Ответ

36 голосов
/ 13 января 2011

В зависимости от того, что вы пытаетесь установить.Если свойства являются свойствами общего базового класса, тогда да, вы можете.У вас также есть больше параметров в WPF, чем в Silverlight, потому что вы можете наследовать стили.Например ...

<Window.Resources>
    <Style x:Key="CommonStyle" TargetType="FrameworkElement">
        <Setter Property="Margin" Value="2" />
    </Style>
    <Style TargetType="StackPanel" BasedOn="{StaticResource CommonStyle}">
    </Style>
    <Style TargetType="Grid" BasedOn="{StaticResource CommonStyle}">
    </Style>
    <Style TargetType="Button" BasedOn="{StaticResource CommonStyle}">
        <Setter Property="Background" Value="LimeGreen" />
    </Style>
</Window.Resources>

Общий стиль CommonStyle будет наследоваться 3 неявными стилями.Но вы можете указать только те свойства, которые являются общими для всех классов FrameworkElement.Вы не можете установить Background в CommonStyle, потому что FrameworkElement не предоставляет свойство Background.Таким образом, хотя у Grid и StackPanel есть Background (унаследованный от Panel), это не то же самое свойство Background, что у Button (унаследованное от Control.)

Надеюсь, это поможет вам в этом.

...