Изменить Path.Data в раскадровке wpf - PullRequest
1 голос
/ 11 декабря 2011

Как можно анимировать данные пути в wpf? У нас есть ряд шаблонных элементов управления silverlight-5, которые изменяют это свойство; эти элементы управления должны быть адаптированы для работы в wpf. В wpf, когда VSM пытается изменить состояние, происходит сбой со следующим исключением:

Невозможно анимировать свойство «Данные» в «System.Windows.Shapes.Path» с помощью «System.Windows.Media.Animation.ObjectAnimationUsingKeyFrames»

Внутреннее исключение: Анимация (ы), примененная к свойству «Данные», вычисляет текущее значение [XXX-путь данных-], которое не является допустимым значением для свойства.

Ниже приведен пример для управления кнопками: путь, который идет от круга к звезде - как это можно сделать в wpf?

    <Style x:Key="ButtonStyle1" TargetType="Button">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Grid>
                        <VisualStateManager.VisualStateGroups>
                            <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="MouseOver">
                                    <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Path.Data)" Storyboard.TargetName="path">
                                        <DiscreteObjectKeyFrame KeyTime="0">
                                            <DiscreteObjectKeyFrame.Value>M 291.42858 512.36218 216.73569 387.62221 74.321018 416.8994 169.87441 307.31546 98.0216 180.91821 l 133.74814 57.01338 98.00719 -107.39498 -12.89251 144.82014 132.42459 60.0235 -141.71614 32.49039 z</DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            </VisualStateGroup>
                        </VisualStateManager.VisualStateGroups>
                        <Viewbox>
                        <Path x:Name="path" Stroke="Black" Fill="Black" UseLayoutRounding="False" Data="m 357.14285 425.21933 c 0 71.79702 -58.20298 130 -130 130 -71.79701 0 -129.999997 -58.20298 -129.999997 -130 0 -71.79702 58.202987 -130 129.999997 -130 71.79702 0 130 58.20298 130 130 z"/>
                        </Viewbox>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1 Ответ

3 голосов
/ 11 декабря 2011

Нет смысла использовать синтаксис элемента, если вы не создаете экземпляр объекта, это все еще строка и Data - это Geometry, просто оберните его в указанный тег, и он должен работать.

<DiscreteObjectKeyFrame.Value>
    <Geometry>
        M 291.42858 512.36218 216.73569 387.62221 74.321018 416.8994 169.87441 307.31546 98.0216 180.91821 l 133.74814 57.01338 98.00719 -107.39498 -12.89251 144.82014 132.42459 60.0235 -141.71614 32.49039 z
    </Geometry>
</DiscreteObjectKeyFrame.Value>
...