How to pass properties to WPF Style

wpf

Solution

OK, I've found a way to do this with dave's help.

The Solution is to create a derived template and set the properties in it. This way the original template can be reused.

<Style x:Key="TabItemStyle2" TargetType="{x:Type TabItem}" 
    BasedOn="{StaticResource TabItemStyle1}">
    <Style.Setters>
        <Setter Property="Margin" Value="40,0"></Setter>
    </Style.Setters>
</Style>

And set the TabControl's ItemContainerStyle to the derived style:

<TabControl ItemContainerStyle="{DynamicResource TabItemStyle2}">

Problem

I'm trying to write a reusable Template for a WPF ItemContainerStyle. This Template changes the way the TabControl's Item looks. This template is meant to be used in several places in the application. In each place it is used I want to be able to pass different parameters to it. For example: to change the Margin of the Border of the Item: ``` <Style x:Key="TabItemStyle1" TargetType="{x:Type TabItem}"> <Setter Property="Margin" Value="10,0"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type TabItem}"> <Grid SnapsToDevicePixels="true"> <Border x:Name="Bd" Width="80" Background="Gray" Margin="{TemplateBinding Margin}"> <ContentPresenter x:Name="Content" ContentSource="Header" /> </Border> </Grid> <ControlTemplate.Triggers> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> ... <TabControl ItemContainerStyle="{DynamicResource TabItemStyle1}"> ``` In the place where the style is used I Would like to Write something like: ``` ItemContainerStyle="{DynamicResource TabItemStyle1 Margin='5,0'}" ``` or ``` <TabControl Margin="78,51,167,90" ItemContainerStyle="{DynamicResource TabItemStyle1}" ItemContainerStyle.Margin="5,0"> ``` The motivation is to use this template in different places with different Margins. Is there a way to do this ? Thank you

Original source