2012-06-29 13 views
15

El siguiente código funciona bien en Silverlight:WinRT/metro animación en código subyacente

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(); 
} 

En WinRT/metro que necesita un cambio menor para que se compile:

Storyboard.SetTargetProperty(doubleAnimation, "Width"); 

pero cuando se ejecutarlo, no pasa nada.

Si cambia la propiedad de "Anchura" a "Opacidad" (también cambie de = 0 y A = 1) eso funciona.

¿Cuál es el problema con "Ancho"?

+0

¿Por qué no ha utilizado 'EventTrigger' http://msdn.microsoft.com/en-us/library/system.windows.eventtrigger.aspx para mover todo este código a xaml? – RredCat

+2

@RredCat - Hasta donde sé, no tenemos EventTrigger en WinRT. –

Respuesta

20

Es necesario añadir lo siguiente:

doubleAnimation.EnableDependentAnimation = true; 

Eso parece solucionar el problema .

+0

¡Gracias, hombre, después de mucho tirón de pelo! – legends2k

+2

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj819807#dependent explica la razón – legends2k

+0

¡Muy útil, gracias! –

1

no estoy seguro pero trate de usar:

Storyboard.SetTargetProperty(doubleAnimation, Button.WidthProperty); 

En lugar de

Storyboard.SetTargetProperty(doubleAnimation, "Width"); 
Cuestiones relacionadas