编辑:在原问题中,我对setter的工作方式做出了一些错误的假设,因此我进行了修改,希望更准确、更有用。
我尝试通过让菜单项的图标在鼠标未悬停在该项上时半透明地显示来使其更加有趣。如果鼠标进入,图标应该被动画化,从而完全可见。
动画效果很好,Storyboard.TargetProperty
允许直接访问图标的不透明度属性:
<Style x:Key="MenuItemMouseOverStyle" TargetType="MenuItem">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Icon.Opacity">
<EasingDoubleKeyFrame KeyTime="0" Value="0.5"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Icon.Opacity">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.5"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
如果我尝试为初始图标透明度使用设置器,代码将无法编译:
<Setter Property="Icon.Opacity" Value="0.5"/>
编辑: 设置器并不像我尝试使用的那样工作,您不能访问属性的属性(请查看答案) 唯一可以做的就是指定目标类,如果样式的目标类型尚未设置,则以下样式应该是等效的:
<Style x:Key="Style1" TargetType="Image">
<Setter Property="Opacity" Value="0.5"/>
</Style>
<Style x:Key="Style2">
<Setter Property="Image.Opacity" Value="0.5"/>
</Style>
我的问题是是否有一种方法可以通过setter来实现这个功能。
(我目前的解决方法是使用单个关键帧故事板,在Loaded
事件触发时触发,效果相当不错)