0

ウィンドウにTabControlがあります。そのため、次のコードのようなスタイルを書きました。

私のコードでは、トリガーする必要があります(トリガーの後にマルチトリガーを使用しました!):

  • まず ---->> IsSelected=True条件のトリガー
  • 2番目 >> IsSelected =True条件の multiTrigger

私のテスト:

2 番目の (マルチトリガー) を 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>

<-- 2 番目のマルチトリガー --> :

                        <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>


編集:

知らせ:

トリガー内で、このメソッドを使用して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 Background プロパティのLinearGradientBrushです。

4

0 に答える 0