在样式中,如何引用应用样式的元素?例如,在我定义RenderTransform
的样式中,我想在RenderTransform上添加动画:
<Style x:Key="myStyle" TargetType="{x:Type FrameworkElement}">
<Setter Property="RenderTransform">
<Setter.Value>
<ScaleTransform />
</Setter.Value>
</Setter>
<Setter Property="RenderTransformOrigin"
Value="0.5, 0.5" />
<Style.Triggers>
<EventTrigger RoutedEvent="MouseDown">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:0.2"
From="1"
To="1.2"
AutoReverse="True"
Storyboard.Target="{Binding RenderTransform}"
Storyboard.TargetProperty="(ScaleTransform.ScaleX)" />
<DoubleAnimation Duration="0:0:0.2"
From="1"
To="1.2"
AutoReverse="True"
Storyboard.Target="{Binding RenderTransform}"
Storyboard.TargetProperty="(ScaleTransform.ScaleY)" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
当然,上面的代码不起作用,因为{Binding RenderTransform}
使用DataContext作为源代码。我尝试使用RelativeSource
模式指定FindAncestor
,但找不到FrameworkElement
父级(可能是因为故事板不是可视树的一部分)。
有没有办法绑定到应用样式的元素的属性?
答案 0 :(得分:4)
样式中的故事板自动定位要应用样式的元素所以您可以完全忽略Storyboard.Target。但是,您需要更改TargetProperty以从元素本身而不是从RenderTransform属性进行导航。因此,以下内容对我有用:
<DoubleAnimation Duration="0:0:0.2"
From="1"
To="1.2"
AutoReverse="True"
Storyboard.TargetProperty="RenderTransform.ScaleX" />