代码之家  ›  专栏  ›  技术社区  ›  Thomas Levesque

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

  •  2
  • Thomas Levesque  · 技术社区  · 15 年前

    在样式中,如何引用应用样式的元素?例如,在样式中,我定义了 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 回复  |  直到 13 年前
        1
  •  4
  •   itowlson    15 年前

    样式中的故事板会自动针对应用样式的元素,这样您就可以完全忽略故事板了。但是,您需要更改TargetProperty以从元素本身导航,而不是从renderTransform属性导航。因此,以下内容对我有效:

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