Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I apply multiple XAML styles to one element?

Tags:

styles

wpf

xaml

I have a toolkit:DataGrid (from Codeplex).

It is starting to have many different styles:

  • one for switching it on and off based on a variable in the ViewModel
  • one for visual styling
  • one for some other triggers, etc.

Do all of these need to be in one big style, is that the only way to do it? Or can I have multiple styles and attach them as I need them? Is there anyway to do this so that you can e.g. swap styles in code?

Styles:

<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>

PSEUDO-CODE:

<toolkit:DataGrid 
    Style="{StaticResource CodePlexDataGridSwapper, ToolkitDataGridLayout}" 
    ItemsSource="{Binding Customers}"/>
like image 452
Edward Tanguay Avatar asked May 27 '09 13:05

Edward Tanguay


1 Answers

You may want to look at the BasedOn property of the Style class. Basically, it allows you to inherit one style from another. The 'child' style will have all of the setters and triggers from the parent one (unless it has setters overriding the parent's ones) plus it will have obviously its own setter and triggers.

Maybe this info will be helpful for you.

like image 73
arconaut Avatar answered Sep 22 '22 02:09

arconaut