Как в стиле я могу ссылаться на элемент, к которому применяется стиль? - PullRequest
2 голосов
/ 10 января 2010

В стиле, как я могу ссылаться на элемент, к которому применяется стиль? Например, в стиле я определяю 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 Ответ

4 голосов
/ 10 января 2010

Раскадровка в стиле автоматически нацеливается на элемент, к которому применяется стиль, так что вы можете просто полностью исключить Storyboard.Target. Однако вам нужно будет изменить свой TargetProperty, чтобы переходить из самого элемента, а не из свойства RenderTransform. Поэтому у меня работает следующее:

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