2011-01-03 1 views
7

Я обрезаю холст у меня с ромбовидным PolyLineSegment в PathGeometry. Я пытаюсь анимировать PointCollection, хотя и не могу, похоже, решить задачу TargetProperty. Это единственная другая ссылка все Google обнаружил, что это довольно много, что я пытаюсь сделать, и то же самое PropertyPath: http://forums.silverlight.net/forums/p/22239/78225.aspxВозможно ли анимировать PolyLineSegment в Silverlight, то есть PointCollection?

Возможно ли это, чтобы получить Point от PointCollection, чтобы изменить это значение в анимация?

ответ

3

К сожалению, я не думаю, что можно оживить Polyline.Points ...

тех точек объекта взяты из «System.Windows.Point» и проблема заключается в том, что их «X» и «Y "свойства не являются свойствами зависимостей. К сожалению, нет способа оживить свойство, которое не является свойством зависимостей с DoubleAnimation.

В примере, который вы указали, анимация основана на сегменте PathFigure (которые имеют свойства зависимостей), а не на System.Windows.Point.

Я попытался бы избежать использования PolyLineSegement в вашем пути, если вы хотите оживить их.

2

Вы могли бы оживить коллекцию точек, как это:

 <Canvas Background="Tan" Width="100" Height="300" Margin="5,0,0,0"> 
     <Path Stroke="RosyBrown" StrokeThickness="4" > 
      <Path.Data> 
      <PathGeometry> 
       <PathGeometry.Figures> 
       <PathFigure StartPoint="5,50"> 
        <PolyLineSegment x:Name="PLS" ></PolyLineSegment> 
       </PathFigure> 
       </PathGeometry.Figures> 
      </PathGeometry> 
      </Path.Data> 
     </Path> 
     <Canvas.Triggers> 
      <EventTrigger RoutedEvent="Canvas.Loaded" > 
      <BeginStoryboard> 
       <Storyboard x:Name="sbPathUpDown" BeginTime="0:0:0"> 
       <ObjectAnimationUsingKeyFrames x:Name="objAni" 
            Duration="0:0:2" 
           AutoReverse="True" RepeatBehavior="Forever" 
            Storyboard.TargetName="PLS" 
            Storyboard.TargetProperty="Points" > 
        <DiscreteObjectKeyFrame Value="10,50 90,50" KeyTime="0:0:0.05"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,60 90,50" KeyTime="0:0:0.5"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,70 105,50" KeyTime="0:0:0.9"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,60 100,40" KeyTime="0:0:1.2"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,50 100,50" KeyTime="0:0:1.5"></DiscreteObjectKeyFrame> 
        <DiscreteObjectKeyFrame Value="10,60 90,50" KeyTime="0:0:1.7" ></DiscreteObjectKeyFrame> 
       </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
      </BeginStoryboard> 
      </EventTrigger> 
     </Canvas.Triggers> 
     </Canvas> 

(одушевляет некоторые linepoints - выглядит плохо, но иллюстрирует пункт: о)

И если вы хотите, чтобы вычислить точки и получить его более разгладить и т.д. вы можете заполнить его в коде:

objAni.KeyFrames.Clear(); 
    double offsetx = 10.0; double offsety = 50; 
    double w = 40; double h = 40; 
    for (int i = 0; i < 20; i++) 
    { 
    var scale = i * 0.1; 
    var ww = w * scale; 
    var hh = h * scale; 
    var pts = new PointCollection(); 
    pts.Add(new Point(offsetx, offsety)); 
    pts.Add(new Point(offsetx + ww, offsety)); 
    pts.Add(new Point(offsetx + ww, offsety + hh)); 
    pts.Add(new Point(offsetx, offsety + hh)); 
    pts.Add(new Point(offsetx, offsety)); 

    objAni.KeyFrames.Add(new DiscreteObjectKeyFrame { Value = pts, KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(i/10.0)) }); 
    } 

Рисует ящик, который изменяет размер - вы можете добавить любые пункты к нему и получить эффект, который вы хотите больше или меньше.

+1

С этим должно быть легко сделать морфоподобное изменение вашей фигуры. Масштабирование и поворот проще с помощью преобразований. –

 Смежные вопросы

  • Нет связанных вопросов^_^