编辑: 在原始问题中,我对如何设置器工作做了一些错误的假设,所以我修改它以希望更准确和有用.
我试图让一些菜单项更有趣,如果鼠标不在项目上方,图标显示为半透明.如果鼠标进入,则应该将图标设置为动画以使其完全可见.动画工作,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>
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用setter作为初始图标不透明度,代码将无法编译:
<Setter Property="Icon.Opacity" Value="0.5"/>
Run Code Online (Sandbox Code Playgroud)
编辑: Setter不按照我尝试使用它们的方式工作,你无法访问属性的属性(参见答案)你唯一能做的就是如果尚未设置样式的目标类型,则指定目标类,如下样式应该是等价的:
<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>
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,是否有办法让它以某种方式与setter一起工作.
(我目前的解决方案是一个单关键帧故事板,由Loaded事件触发,效果很好)