ウィンドウに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です。