2011-01-12 3 views
15

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

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

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

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

ответ

28

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

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

+0

Отлично, это то, что мне нужно, спасибо. – ocodo

+8

Если стиль не имеет поля x: Key - он будет применяться к * всем * объектам этого типа. Итак, все * StackPanels, Grids & Buttons будут иметь этот запас. – DefenestrationDay

+0

Спасибо @DefenestrationDay !!! –

Смежные вопросы