Применение стиля WPF для нескольких элементов управления

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

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

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

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

Ответы

Ответ 1

Сортировка, в зависимости от того, что вы пытаетесь установить. Если свойства являются свойствами общего базового класса, то да, вы можете. У вас также есть больше опций в 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 будет унаследован тремя неявными стилями. Но вы можете указать только свойства, которые являются общими для всех классов FrameworkElement. Вы не можете установить Background в CommonStyle, потому что FrameworkElement не предоставляет свойство Background. Таким образом, хотя Grid и StackPanel имеют Background (унаследованные от Panel), это не то же свойство фона, что и Button (унаследовано от Control.)

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