Имеют ли одиночные триггеры более высокий приоритет для мультитриггеров с одинаковыми условиями в WPF?

У меня есть TabControl в моем окне. поэтому я написал стиль для него, как следующие коды.

В моих кодах есть триггер (я использовал мультитриггер после триггера!):

  • Первый ---->> Триггер с условием IsSelected=True
  • Второй >> Multi Trigger с IsSelected=True условие

Мои тесты:

Я хочу использовать второй (мультитриггер) с условием 2 (IsSelected=True + IsMouseOver=True), но я вижу, что его эффект будет показан только тогда, когда я прокомментирую один триггер!!

Поэтому я прокомментировал условие IsMouseOver = True в мультитриггере и протестировал его снова, НО результат был таким же, как был раньше >> Эффект просто показывает, когда комментируется один триггер

Также я поместил одиночный триггер вниз и Multitrigger вверх, а затем протестировал его, НО результат был таким же, как был раньше >> Эффект просто показывает, когда комментируется одиночный триггер


Теперь мой вопрос:

  • В моих кодах есть ошибки?

  • Является ли в 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>

и внутри Multi Trigger я изменяю фон 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 является LinearGradientBrush для свойства фона TabItemBorder

0 ответов

Другие вопросы по тегам