【问题标题】:In a style, how can I refer to the element on which the style is applied?在样式中,如何引用应用样式的元素?
【发布时间】:2010-01-10 03:39:20
【问题描述】:

在样式中,如何引用应用样式的元素?例如,在样式中我定义了一个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 作为源。我尝试用FindAncestor 模式指定RelativeSource,但找不到FrameworkElement 父级(可能是因为情节提要不是可视树的一部分)。

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

【问题讨论】:

    标签: wpf binding styles


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 1970-01-01
      • 2010-12-22
      • 2015-06-17
      • 1970-01-01
      • 2021-12-07
      • 2015-11-09
      • 2017-08-09
      • 2016-05-03
      相关资源
      最近更新 更多