Animar el ancho de un control de borde

Estoy tratando de animar el ancho de un control de borde en una aplicación Metro de Windows 8. Logré animar otras propiedades en el Borde, como Opacidad:

private void Item_Tapped(object sender, RoutedEventArgs e)
{
    var border = sender as Border;

    var animation = new DoubleAnimation();
    animation.To = 0.0;
    animation.Duration = new Duration(TimeSpan.FromSeconds(1));

    var storyboard = new Storyboard();
    storyboard.Children.Add(animation);

    Storyboard.SetTarget(animation, border);
    Storyboard.SetTargetProperty(animation, "Opacity");

    storyboard.Begin();
}

Pero cuando trato de animar el ancho del control:

private void Item_Tapped(object sender, RoutedEventArgs e)
{
    var border = sender as Border;

    var animation = new DoubleAnimation();
    animation.To = 600.0;
    animation.Duration = new Duration(TimeSpan.FromSeconds(1));

    var storyboard = new Storyboard();
    storyboard.Children.Add(animation);

    Storyboard.SetTarget(animation, border);
    Storyboard.SetTargetProperty(animation, "Width");

    storyboard.Begin();
}

No pasa nada.

Puedo hacer esto en WPF, pero no en Windows 8. ¿Es una limitación o un error de Metro, o estoy haciendo algo mal?

Muchas Gracias

preguntado el 27 de julio de 12 a las 21:07

2 Respuestas

Pude hacerlo funcionar habilitando EnableDependentAnimation

    public static async Task Width(FrameworkElement obj, double doubleValue, int milliseconds)
    {
        var animation= new DoubleAnimation
        {
            To = doubleValue,
            Duration = TimeSpan.FromMilliseconds(milliseconds),
            EnableDependentAnimation = true// <== here
        };

        Storyboard.SetTarget(animation, obj);
        Storyboard.SetTargetProperty(animation, "Width");

        var sb = new Storyboard();
        sb.Children.Add(animation);
        await sb.BeginAsync();
    }

¡Que la disfrutes!

respondido 03 mar '16, 14:03

No estoy seguro de cómo lo tienes funcionando en WPF. De acuerdo a http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard.targetproperty, la propiedad de destino debe ser una propiedad de dependencia. De acuerdo a http://msdn.microsoft.com/en-us/library/system.windows.controls.border, Width no es una propiedad de dependencia.

Respondido 27 Jul 12, 22:07

Puedo animar la propiedad Ancho en WPF y SL, evidenciado aquí. Desafortunadamente, esta técnica no parece funcionar en WinRT, por lo que probablemente tenga razón en que Width no es "animable". Gracias - Adam Anderson

@phoog: la documentación a la que apunta en realidad dice que Width es de hecho una DependencyProperty, heredada de FrameworkElement, por lo que definitivamente esta no es la razón por la cual esta propiedad no se puede animar. msdn.microsoft.com/en-us/library/… - Murven

El mismo problema con Line.X1 / Line.X2, etc. (Windows.UI.Xaml.Shapes), funciona en WPF, no se puede hacer en 8.1. - Jean.R

@Murven Llegué a la conclusión de que Width no es una propiedad de dependencia porque la página de propiedades dice "Esta es una propiedad de dependencia" para varias propiedades, y Width no es una de ellas. Aparentemente asumí demasiado de la documentación. - zorra

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.