Have the single triggers higher priority on multitriggers with same conditions in WPF?

271 Views Asked by At

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

0

There are 0 best solutions below