0

我的窗口中有一个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>

TabControlBorderLinearGradientBrushTabItemBorder 背景属性LinearGradientBrush

4

0 回答 0