tabitemテンプレートをオーバーライドして、独自のカスタムスタイルを作成しました。ただし、マウスオーバーイベントのイベントトリガーを作成する方法がわかりません。
返信が遅れて申し訳ありませんが、コメントの通知が届きません(変更する必要があるかもしれません)。わかりました、これについてさらに説明しようと思います。サンプルコードを投稿する必要があるため、コメントを追加していません。あなたがコントロールを持っているとしましょう、どんなコントロールでも。いくつかのブラシもリソースとして定義したとしましょう。それで:
<LinearGradientBrush x:Key="NormalGradientBrush">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Red" Offset="1" />
</LinearGradientBrush>
<LinearGradientBrush x:Key="NormalForeground">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Gray" Offset="1" />
</LinearGradientBrush>
<LinearGradientBrush x:Key="MouseOverGradientBrush">
<GradientStop Color="Red" Offset="0" />
<GradientStop Color="Green" Offset="0.2" />
<GradientStop Color="Black" Offset="1" />
</LinearGradientBrush>
<RadialGradientBrush x:Key="MouseOverForeground" GradientOrigin="0.3,0.5">
<GradientStop Color="Gray" Offset="0" />
<GradientStop Color="Black" Offset="1" />
</RadialGradientBrush >
ここで、タブアイテムコントロールがあるとします。
<LinearGradientBrush x:Key="MouseOverGradientBrush">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Red" Offset="1" />
</LinearGradientBrush>
<Style x:Key="StyleTabItem"
TargetType="{x:Type TabItem}">
<Setter Property="Foreground"
Value="{StaticResource NormalForeground}" />
<Setter Property="BorderBrush"
Value="Black" />
<Setter Property="Background"
Value="{StaticResource NormalGradientBrush}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TabItem}">
<Grid SnapsToDevicePixels="true">
<Border x:Name="Bd"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="1,1,1,0"
Padding="{TemplateBinding Padding}">
<ContentPresenter x:Name="Content"
HorizontalAlignment="Center"
VerticalAlignment="Center"
SnapsToDevicePixels="True"
ContentSource="Header"
RecognizesAccessKey="True" />
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"
Value="true">
// what here?
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
したがって、問題は、MouseOverイベントで現在のブラシからMouseOverGradientBrushに、現在のフォアグラウンドからMouseOverForegroundに3秒のアニメーションを実行するようにwpfに指示するにはどうすればよいですか?例では、グラデーションのオフセットを1つずつ変更することでこれを行うことがわかりました。私は今それが欲しいです。コードのサイズが大きくなり、非常に面倒になる可能性があります。さらに、ブラシのオフセット数が異なる場合や、1つが線形で、もう1つが放射状である場合があります。これがより明確になることを願っています。