我的窗口中有一个TabControl。所以我为它写了一个样式,就像下面的代码一样。
在我的代码中有触发(我在触发后使用了多重触发!):
- 首先 ---->>条件为IsSelected=True的触发器
- 第二 >>具有IsSelected=True条件的 multiTrigger
我的测试:
我想使用第二个(多触发器)和 2 个条件(IsSelected=True + IsMouseOver=True),但我看到它的效果将在我评论单个触发器时显示!
所以我在多重触发器中评论了 IsMouseOver=True 条件并再次测试它但结果与之前相同>>效果仅在评论单个触发器时显示
此外,我将单触发器向下放置,然后将多触发器向上放置,然后对其进行测试,但结果与之前相同>>效果仅在评论单触发器时显示
现在我的问题:
我的代码有错误吗?
在 WPF 中,单个触发器是否优先于具有相同条件的多触发器?
原因不一样......
我怎么解决这个问题?
.
<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>
<-- 第一个单触发--> :
<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>
<-- 第二次多重触发 --> :
<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>
编辑:
注意:
在 Trigger 内部,我使用以下方法更改TabItemBorder背景:
<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>
在 MultiTrigger中,我使用以下方法更改TabControlBorderLinearGradientBrush背景:
<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>
而TabControlBorderLinearGradientBrush是TabItemBorder 背景属性的LinearGradientBrush