Как я могу применить несколько стилей XAML к одному элементу?

У меня есть инструментарий: DataGrid (от Codeplex).

У него появляется много разных стилей:

  • один для включения и выключения на основе переменной в ViewModel
  • один для визуального стиля
  • один для каких-то других триггеров и т. д.

Все ли это должно быть в одном большом стиле, это единственный способ сделать это? Или я могу использовать несколько стилей и прикреплять их по мере необходимости? Есть ли способ сделать это, например, поменять местами стили в коде?

Стили:

<Style x:Key="CodePlexDataGridSwapper" TargetType="toolkit:DataGrid">
    <Style.Triggers>
        <DataTrigger Binding="{Binding WhichGrid}" Value="Infragistics">
            <Setter Property="toolkit:DataGrid.Visibility" Value="Collapsed"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

<Style x:Key="ToolkitDataGridLayout" TargetType="toolkit:DataGrid">
    <Setter Property="Background" Value="Yellow"/>
</Style>

ПСЕВДОКОД:

<toolkit:DataGrid 
    Style="{StaticResource CodePlexDataGridSwapper, ToolkitDataGridLayout}" 
    ItemsSource="{Binding Customers}"/>

person Edward Tanguay    schedule 27.05.2009    source источник


Ответы (1)


Вы можете посмотреть свойство BasedOn класса Style. По сути, это позволяет вам наследовать один стиль от другого. «Дочерний» стиль будет иметь все сеттеры и триггеры из родительского (если только он не имеет сеттеров, переопределяющих родительские), плюс, очевидно, у него будет свой собственный сеттер и триггеры.

Возможно, эта информация будет вам полезна.

person arconaut    schedule 27.05.2009
comment
+1, потому что это отчасти помогает, но все же не помогает в применении / слиянии более двух отдельных наборов стилей. К сожалению, вполне вероятно, что кроме простого, основанного на полунаследовании, нет никакого способа применить «многие» из них. - person quetzalcoatl; 06.04.2013
comment
ответ может быть здесь: http://stackoverflow.com/questions/16096/how-to-apply-multiple-styles-in-wpf - person Admiral Land; 02.03.2016