2012-06-29 5 views
15

Der folgende Code funktioniert in Silverlight fein:WinRT/Metro Animation in Code-Behind

private void Button_Click_1(object sender, RoutedEventArgs e) 
{  
    Storyboard storyboard = new Storyboard(); 
    DoubleAnimation doubleAnimation = new DoubleAnimation(); 
    doubleAnimation.From = 50; 
    doubleAnimation.To = 100; 
    doubleAnimation.RepeatBehavior = RepeatBehavior.Forever; 
    doubleAnimation.AutoReverse = true; 
    doubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(200)); 
    storyboard.Children.Add(doubleAnimation); 
    Storyboard.SetTarget(doubleAnimation, button1); 
    Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("Width")); 
    storyboard.Begin(); 
} 

In WinRT/Metro es eine kleine Änderung muss es kompilieren machen:

Storyboard.SetTargetProperty(doubleAnimation, "Width"); 

aber, wenn Sie Lauf es, nichts passiert.

Wenn Sie die Eigenschaft von "Breite" in "Deckkraft" ändern (auch ändern von = 0 und bis = 1), funktioniert das.

Was ist das Problem mit "Breite"?

+0

Warum haben Sie nicht den 'EventTrigger' http://msdn.microsoft.com/en-us/library/system.windows.eventtrigger.aspx verwendet, um diesen ganzen Code nach xaml zu verschieben? – RredCat

+2

@RredCat - Soweit ich weiß, haben wir keinen EventTrigger in WinRT. –

Antwort

20

Sie müssen die folgenden hinzuzufügen:

doubleAnimation.EnableDependentAnimation = true; 

, dass das Problem zu beheben scheint .

+0

Danke Mann, nach viel Haarziehen! – legends2k

+2

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj819807#dependent erklärt den Grund – legends2k

+0

Sehr hilfreich, danke! –

1

bin ich nicht sicher, sondern versuchen, verwenden:

Storyboard.SetTargetProperty(doubleAnimation, Button.WidthProperty); 

Statt

Storyboard.SetTargetProperty(doubleAnimation, "Width");