NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
lukas.sei
Člen
Avatar
lukas.sei:26.7.2016 17:22

Č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.7.2016 17:22
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na lukas.sei
Petr Čech:26.7.2016 18:21

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.7.2016 18:21
the cake is a lie
Avatar
lukas.sei
Člen
Avatar
Odpovídá na Petr Čech
lukas.sei:26.7.2016 20:01

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.7.2016 20:01
Avatar
ORRNY99
Člen
Avatar
ORRNY99:27.7.2016 10:42

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
27.7.2016 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.