我已经覆盖了 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>
所以问题是,我如何告诉 wpf 在 MouseOver 事件上从当前画笔到 MouseOverGradientBrush 以及从当前前景到 MouseOverForeground 做一个 3 秒的动画?我在示例中看到您通过一一更改渐变的偏移量来做到这一点。我现在确实想要那个。它增加了代码的大小,最终可能会变得非常混乱。此外,笔刷可能有不同数量的偏移,或者一个可以是线性的,另一个可以是径向的。我希望这更清楚。