我重写了tabitem模板并创建了我自己的自定义样式。不过,我不确定如何为鼠标悬停事件编写事件触发器。如何使用WPF触发器将鼠标悬停在事件上对于选项卡项目?
对不起,迟到的回应,我没有得到意见通知(也许这应该改变?)。好吧,我会试着进一步解释这一点。我不添加评论,因为我需要发布示例代码。假设你有一个控件,任何控件。 比方说,你还定义了一些画笔作为资源。 所以:
<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从当前画笔做3秒钟动画MouseOverGradientBrush和从MouseOver事件的当前前景到MouseOverForeground? 我在例子中看到你通过逐渐改变渐变的偏移量来做到这一点。我现在要这样做。它增加了代码的大小,最终会变得非常混乱。除了刷子可能有不同数量的偏移量,或者一个可以是线性的,另一个可以是径向的。 我希望这更清楚。
嘿Foovanadil是的工作。谢谢。 现在,有没有办法使用故事板在MouseOver事件上更改为MouseOverGradientBrush(不是单独指定每个偏移量,而是仅指定整个画笔资源)? – immuner 2009-11-12 20:09:27
不确定你的意思。你想要改变实际的画笔资源到鼠标上的另一个画笔上面的触发器?你能否进一步解释你的具体情况?我的直觉反应是在设计时指定不同的画笔资源,然后交换您在触发器中使用的画笔资源(与使用一个画笔资源并尝试更改其内容)。这种方法在你的情况下不可行吗? – 2009-11-16 21:36:09