Diskuze: Proč tato animace nefunguje ?

C# .NET .NET (C# a Visual Basic) Proč tato animace nefunguje ? American English version English version

Avatar
lukas.sei
Člen
Avatar
lukas.sei:

Čaute,
Mám WPF projekt, kde mám vložený jeden obrázek. A potřebuji udělat animaci otočení od 30 do 81 stupňů. Zároveň potřebuji aby to bylo hotovo v story boardu a v code behind.

Tady je kód, který jsem vytvořil:

DoubleAnimation da = new DoubleAnimation();
            da.From = 30;
            da.To = 81;
            da.Duration = new Duration(TimeSpan.FromSeconds(15));

            Storyboard storyboard = new Storyboard();
            storyboard.Children.Add(da);
            Storyboard.SetTarget(da, mW.swordPlayerLeft);
            Storyboard.SetTargetProperty(da, new PropertyPath("RenderTransform.Angle"));
            storyboard.Begin();

Ale pokaždé, když se spustí otáčení dostanu tuto chybu a nic se neděje:

"Nelze určit všechny reference vlastnosti v cestě vlastnosti RenderTransfor­m.Angle. Ověřte, zda použitelné objekty tyto vlastnosti podporují."

Mohl by mi tu někdo pomoct ?

 
Odpovědět 26. července 17:22
Avatar
Odpovídá na lukas.sei
Petr Čech (czubehead):

Rendertransform samo o sobě nemá vlastnost Angle. Nejdříve musíš definovat v XAML něco jako

<Image.RenderTransform>
        <RotateTransform x:Name="rotTransf"/>
</Image.RenderTransform>

a potom to bude

Storyboard.SetTarget(da, rotAngle);
Storyboard.SetTargetProperty(da, new PropertyPath("Angle"))
Nahoru Odpovědět 26. července 18:21
Why so serious? -Joker
Avatar
lukas.sei
Člen
Avatar
Odpovídá na Petr Čech (czubehead)
lukas.sei:

Tak jsem udělal menší úpravu. Chyba se sice již nezobrazí, ale obrázek se nezačne otáčet.
XAML

<Image Source="Resources/Pictures/sword.png" Margin="209,67,296,172" RenderTransformOrigin="0.5,0.87" Name="swordPlayerLeft" Visibility="Visible">
                        <Image.RenderTransform>
                            <TransformGroup>
                                <ScaleTransform/>
                                <SkewTransform/>
                                <RotateTransform Angle="35.053" x:Name="swordPlayerLeftAngle"/>
                                <TranslateTransform X="-22.311" Y="-7.039"/>
                            </TransformGroup>
                        </Image.RenderTransform>
                    </Image>

c#

DoubleAnimation da = new DoubleAnimation();
            da.From = 30;
            da.To = 81;
            da.Duration = new Duration(TimeSpan.FromSeconds(15));

            Storyboard storyboard = new Storyboard();
            storyboard.Children.Add(da);
            Storyboard.SetTarget(da, mW.swordPlayerLeftAngle);
            Storyboard.SetTargetProperty(da, new PropertyPath("Angle"));
            storyboard.Begin();
 
Nahoru Odpovědět 26. července 20:01
Avatar
ORRNY99
Člen
Avatar
ORRNY99:

Zkus tohle.
XAML

<Image x:Name="img" HorizontalAlignment="Center" Height="100"  VerticalAlignment="Center" Width="100">
           <Image.RenderTransform>
               <RotateTransform Angle="30"/>
           </Image.RenderTransform>
       </Image>

c#

var rotateAnimation = new DoubleAnimation(30, 81, TimeSpan.FromSeconds(15));
var rt = (RotateTransform)img.RenderTransform;
rt.BeginAnimation(RotateTransform.AngleProperty, rotateAnimation);
 
Nahoru Odpovědět  +1 27. července 10:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.