Ich beschäftige mich seit einer Woche mit dem folgenden Problem. Bitte, ertragen Sie mit mir, wie ich es erkläre.WPF: Animieren entlang der Pfadgeometrie
Was ich versuche zu erreichen, ist für einige von uns ziemlich einfach, aber neu in WPF zu sein macht es schwierig.
Das Bild oben durch Umwandlung (bereits hatte) svg
-xaml
und danach den Import es zu Visual Studio gemacht wurde. So sieht das Xaml aus.
<Canvas x:Name="Main" Margin="158,-223,-148,233">
<Canvas.RenderTransform>
<MatrixTransform Matrix="1.25 0 0 -1.25 -197.1231 961.58875"/>
</Canvas.RenderTransform>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path139746" Fill="#FFD3BC5F" Canvas.Left="399.4" Canvas.Top="-172.6">
<Path.Data>
<PathGeometry Figures="m 66.611178 552.33853 c -4.36996 0.6305 -8.8334 0.97293 -13.3752 0.97293 -18.11465 0 -35.027 -5.21161 -49.34949 -14.18974 l 21.64732 -36.67733 c 8.2963 5.25686 18.12667 8.31294 28.67512 8.31294 2.7121 0 5.37755 -0.20365 7.98106 -0.59283 l 2.23539 -0.38916 c 4.72288 -0.91109 9.2226 -2.43913 13.41755 -4.49964 l 35.933612 77.65818 c -12.53504 5.94167 -26.095762 10.06571 -40.347392 12.0342 0 0 -2.27764 -21.55688 -4.54327 -42.98252 l -2.2747 0.35297 z" FillRule="nonzero"/>
</Path.Data>
</Path>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Fill="#FFD3BC5F" Canvas.Left="401" Canvas.Top="-173" >
<Path.Data>
<PathGeometry x:Name="path139750" Figures="m -21.311892 515.98804 c -11.7053 -15.57594 -18.6547 -34.92004 -18.6622 -55.85694 l 35.53987 0 5.06525 -0.024 c 0.63507 11.4535 4.86922 21.94 11.58023 30.3706 l 1.44647 1.7423 c 2.94008 3.3894 6.29329 6.4077 9.98888 8.9736 l -43.53754 73.76488 c -13.18956 -8.30539 -24.88746 -18.76176 -34.60186 -30.87743 0 0 17.3968 -13.23944 34.61076 -26.3386 l -1.42986 -1.75428 z" FillRule="nonzero"/>
</Path.Data>
</Path>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path139780" Fill="#FFD3BC5F" Canvas.Left="401.4" Canvas.Top="-167.6">
<Path.Data>
<PathGeometry Figures="m 214.75854 460.1016 94.92962 0 0 69.86866 -94.92962 0 0 -69.86866 z" FillRule="nonzero"/>
</Path.Data>
</Path>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path139784" Fill="#FFD3BC5F" Canvas.Left="401.4" Canvas.Top="-167.6">
<Path.Data>
<PathGeometry Figures="m 211.64803 529.825 -36.87191 0 -62.32503 -69.72236 100.95576 0 0 69.74499 -1.75882 -0.0226 z" FillRule="nonzero"/>
</Path.Data>
</Path>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Fill="#FFD3BC5F" Canvas.Top="-173" Canvas.Left="401">
<Path.Data>
<PathGeometry x:Name="path139798" Figures="m -41.482092 460.131 -43.5377 0 c 0.6744 30.93022 11.4414 59.36853 29.1278 82.17137 l 33.3799 -25.40184 c -11.9001 -15.82789 -18.9641 -35.4887 -18.97 -56.76953" FillRule="nonzero"/>
</Path.Data>
</Path>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path139802" Fill="#FFD3BC5F" Canvas.Left="399.4" Canvas.Top="-172.6">
<Path.Data>
<PathGeometry Figures="m 139.82292 494.54117 c -13.01467 -14.5593 -25.97803 -29.06131 -30.40076 -34.00892 0 0 -2.72123 28.49563 -29.566602 43.70507 l 17.54746 37.92328 c 19.158502 -10.35383 34.278952 -27.22704 42.419902 -47.61943" FillRule="nonzero"/>
</Path.Data>
</Path>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path139806" Fill="#FFD3BC5F" Canvas.Left="399.4" Canvas.Top="-172.6">
<Path.Data>
<PathGeometry Figures="m 98.037008 543.53024 17.776782 38.41802 c 23.1211 -11.42479 42.62202 -29.06882 56.29587 -50.76297 l 0.18403 -0.31676 c 0 0 -15.53072 -17.37553 -31.34655 -35.06934 -8.34762 20.43762 -23.62341 37.33197 -42.910132 47.73105" FillRule="nonzero"/>
</Path.Data>
</Path>
<Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path139810" Fill="#FFD3BC5F" Canvas.Left="399.4" Canvas.Top="-172.6">
<Path.Data>
<PathGeometry Figures="m 53.235488 554.82033 c -18.39362 0 -35.56859 -5.28853 -50.11595 -14.3994 l -21.08756 35.73002 c 21.04842 12.78086 45.75185 20.14348 72.17809 20.14348 5.74697 0 11.40815 -0.36201 16.97265 -1.03931 l -4.37747 -41.4213 c -4.43321 0.63805 -8.96144 0.98651 -13.56976 0.98651" FillRule="nonzero"/>
</Path.Data>
</Path>
<Rectangle Name="object_to_move" Fill="LightBlue" Height="36" Stroke="Black" Width="41" Canvas.Left="330" Canvas.Top="229"/>
ich will, ist zu animieren/die Box (Rechteck) auf dem Weg zu bewegen, sie (die Box) aussehen wie das Reisen und die Verwendung dieser (der Weg) als Straße zu bewegen machen.
Ich habe versucht mit DoubleAnimationUsingPath
. Aber ich bin sehr verwirrt, und ich denke, ich verwende die Dinge nicht richtig.
Ich habe den folgenden Code snippt gefunden und versucht, es zu manipulieren und auf mein Beispiel anzuwenden, konnte es aber nicht funktionieren.
// path139798.Freeze(); // For performance benefits.
DoubleAnimationUsingPath daPath = new DoubleAnimationUsingPath();
daPath.Duration = TimeSpan.FromSeconds(5);
daPath.RepeatBehavior = RepeatBehavior.Forever;
daPath.AccelerationRatio = 0.6;
daPath.DecelerationRatio = 0.4;
daPath.AutoReverse = true;
daPath.PathGeometry = path139798;
daPath.Source = PathAnimationSource.X;
circle2.BeginAnimation(Canvas.LeftProperty, daPath);
daPath = new DoubleAnimationUsingPath();
daPath.Duration = TimeSpan.FromSeconds(5);
daPath.RepeatBehavior = RepeatBehavior.Forever;
daPath.AccelerationRatio = 0.6;
daPath.DecelerationRatio = 0.4;
daPath.AutoReverse = true;
daPath.PathGeometry = path139798;
daPath.Source = PathAnimationSource.Y;
circle2.BeginAnimation(Canvas.TopProperty, daPath);
}
Könnte jemand helfen. Vielen Dank!
Ooooh, das sieht nach einem lustigen aus. Alles, was ich sehe, ist also path139798. Bedeutet das, dass du nur versuchst, es dem Pfad der unteren linken ersten Form folgen zu lassen, die diesen Namen hat? Es sieht fast so aus, als ob Sie mit den anderen Formen einen Irrgarten anfangen, also dachte ich, ich würde fragen, weil ich Schwierigkeiten habe, Ihr gewünschtes Ergebnis basierend auf Ihrer Erklärung zu visualisieren. –
@ChrisW. Hey Danke, dass du dir Zeit genommen hast und gefragt hast. Ich versuche, die Box entlang der Formen folgen zu lassen, die ich oben beschrieben habe, nur im Codebeispiel ist nur eine Form (Sie haben Recht), aber das Codebeispiel funktioniert nicht. Ich habe nur versucht, den Ausweg zu finden, indem ich nur einen Pfadnamen benutzte, um zu überprüfen, ob ich Dinge richtig gemacht habe, die ich nicht habe.Also noch einmal, alles was ich versuche, die Box entlang der Formen zu bewegen. – user3641381
Ok cool, du brauchst einen konsistenten Pfad, um deinen Bewegungspfad zu definieren, sorge dafür, dass du dieses Bild in Farbe oder etwas lädst und zeichne einfach eine grobe Linie, die das Rechteck als Pfad nehmen sollte? –