I have a TabControl in my window. so i wrote a style for it like the following codes.
In my codes there are to trigger (i used multitrigger after triger!):
- First ---->> A Trigger with IsSelected=True condition
- Second >> A multiTrigger with IsSelected=True condition
My Tests:
I want use the second (multitrigger) with 2 condition (IsSelected=True + IsMouseOver=True), but i see it's effect will be show just when i comment the single trigger!!
So i commented the IsMouseOver=True condition in multitrigger and tested it again BUT the result was same as which was before >> the effect just show when single trigger is commented
Also i placed Single trigger down and Multitrigger up then tested it BUT the result was same as which was before >> the effect just show when single trigger is commented
Now My Question:
Has my codes any mistake?
Is in WPF the single Triggers have priority on multiTriggers with same conditions?
The reason is different....
How can i solve this problem?
.
<Style TargetType="TabControl">
<Style.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Border x:Name="TabItemBorder"...........
<Border.Background>
<LinearGradientBrush x:Name="TabControlBorderLinearGradientBrush"........
<GradientStop Color="#FF999999"....
<GradientStop Color="#FF999999"....
<GradientStop Color="#FFa3a3a3"....
</LinearGradientBrush>
</Border.Background>
<ContentPresenter x:Name="ContentSite".....
</Border>
<ControlTemplate.Triggers>
<-- First Single Trigger --> :
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="TabItemBorder" Property="Background">
<Setter.Value>
<LinearGradientBrush......
<GradientStop Color="#FF9D6AC6".....
<GradientStop Color="#FF9D6AC6".....
<GradientStop Color="#FFA776CF".....
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<-- Second Multi Trigger --> :
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="True"/>
<!--<Condition SourceName="TabItemBorder" Property="IsMouseOver" Value="true"/>-->
</MultiTrigger.Conditions>
<MultiTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="TabControlBorderLinearGradientBrush" Storyboard.TargetProperty = "(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)"
To="#FFaD6AC6"....
<ColorAnimation Storyboard.TargetName="TabControlBorderLinearGradientBrush" Storyboard.TargetProperty = "(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)"
To="#FFaD6AC6"....
<ColorAnimation Storyboard.TargetName="TabControlBorderLinearGradientBrush" Storyboard.TargetProperty = "(LinearGradientBrush.GradientStops)[2].(GradientStop.Color)"
To="#FFb776CF"....
</Storyboard>
</BeginStoryboard>
</MultiTrigger.EnterActions>
<MultiTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="TabControlBorderLinearGradientBrush" Storyboard.TargetProperty = "(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)"
To="#FF9D6AC6"....
<ColorAnimation Storyboard.TargetName="TabControlBorderLinearGradientBrush" Storyboard.TargetProperty = "(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)"
To="#FF9D6AC6"....
<ColorAnimation Storyboard.TargetName="TabControlBorderLinearGradientBrush" Storyboard.TargetProperty = "(LinearGradientBrush.GradientStops)[2].(GradientStop.Color)"
To="#FFA776CF"....
</Storyboard>
</BeginStoryboard>
</MultiTrigger.ExitActions>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Style.Resources>
EDIT:
Notice:
Inside Trigger i change the TabItemBorder background with this method:
<Setter TargetName="TabItemBorder" Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FF9D6AC6" Offset="0"/>
<GradientStop Color="#FF9D6AC6" Offset="0.584"/>
<GradientStop Color="#FFA776CF" Offset="0.571"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
and Inside MultiTrigger i change the TabControlBorderLinearGradientBrush background with this method:
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetName="TabControlBorderLinearGradientBrush" Storyboard.TargetProperty = "(LinearGradientBrush.GradientStops)[0].(GradientStop.Color)"
To="#FFaD6AC6" Duration="0:0:0.2"/>
<ColorAnimation Storyboard.TargetName="TabControlBorderLinearGradientBrush" Storyboard.TargetProperty = "(LinearGradientBrush.GradientStops)[1].(GradientStop.Color)"
To="#FFaD6AC6" Duration="0:0:0.2"/>
<ColorAnimation Storyboard.TargetName="TabControlBorderLinearGradientBrush" Storyboard.TargetProperty = "(LinearGradientBrush.GradientStops)[2].(GradientStop.Color)"
To="#FFb776CF" Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
and the TabControlBorderLinearGradientBrush is the LinearGradientBrush of TabItemBorder Background Property