在样式中,如何引用应用样式的元素?

时间:2010-01-10 03:39:21

标签: wpf binding styles

在样式中,如何引用应用样式的元素?例如,在我定义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父级(可能是因为故事板不是可视树的一部分)。

有没有办法绑定到应用样式的元素的属性?

1 个答案:

答案 0 :(得分:4)

样式中的故事板自动定位要应用样式的元素所以您可以完全忽略Storyboard.Target。但是,您需要更改TargetProperty以从元素本身而不是从RenderTransform属性进行导航。因此,以下内容对我有用:

<DoubleAnimation Duration="0:0:0.2"
                 From="1"
                 To="1.2"
                 AutoReverse="True"
                 Storyboard.TargetProperty="RenderTransform.ScaleX" />