none
Como animar un UserControl usando StoryBoard? RRS feed

  • Pregunta

  • Hola, estoy tratando de poner una animacion a un control de usario pero siempre obtengo un mensaje de error, para ejemplificar esto, cree un proyecto simple, en mi control de usuario solamente tengo un frame:

    <UserControl x:Class="TestWPF2.UserControl1"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" Height="100" Width="100">
        <Grid>
            <Frame Name="frm" Background="Crimson"></Frame>
        </Grid>
    </UserControl>

    Y en mi ventana principal creo una instancia de este control y lo agrego:

    private void Window_Loaded_1(object sender, RoutedEventArgs e)
            {
                NameScope.SetNameScope(this, new NameScope());
                uc = new UserControl1() { Name = "uc1" };
                uc.frm.MouseDoubleClick += frm_MouseDoubleClick;
                
                this.RegisterName(uc.Name, uc);
                this.Content = uc;
            }

    y finalmente en el evento frm_MouseDoubleClick es donde intento hacer la animacion para cambiar el tamaño del control:

    void frm_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                uc.frm.Background = new SolidColorBrush(Colors.Indigo);
    
                Storyboard myStoryboard = new Storyboard();
                DoubleAnimation heightAnimation = new DoubleAnimation(100, 200, new Duration(TimeSpan.FromSeconds(1)));
                DoubleAnimation widthAnimation = new DoubleAnimation(100, 200, new Duration(TimeSpan.FromSeconds(1)));
    
                Storyboard.SetTargetName(heightAnimation, uc.Name);
                Storyboard.SetTargetProperty(heightAnimation, new PropertyPath("Height"));
    
                Storyboard.SetTargetName(widthAnimation, uc.Name);
                Storyboard.SetTargetProperty(widthAnimation, new PropertyPath("Width"));
    
                myStoryboard.Children.Add(heightAnimation);
                myStoryboard.Children.Add(widthAnimation);
    
                myStoryboard.Begin(uc);
            }

    Pero al llamar myStoryBoard.Begin es cuando me aparece el error:

    El nombre 'uc1' no se encuentra en el ámbito de nombres de 'TestWPF2.UserControl1'.

    Segun he estado leyendo algunos articulos este error ocurria si no tenia registrado el control pero ya lo hice con this.RegisterName, no se si me este faltando algo o tenga algun error.

    Alguien me podria ayudar con esto?

    Saludos,

    Alberto


    Juan Alberto

    martes, 19 de noviembre de 2013 19:02

Respuestas

  • Creo que encontré una posible solución, en lugar de utilizar SetTargetName utilice SetTarget y con eso ya funciono.

    //Storyboard.SetTargetName(heightAnimation, uc.Name);
    Storyboard.SetTarget(heightAnimation, uc);
               
    //Storyboard.SetTargetName(widthAnimation, uc.Name);
    Storyboard.SetTarget(widthAnimation, uc);


    Juan Alberto

    • Marcado como respuesta Alberto_Mz_Dz miércoles, 20 de noviembre de 2013 0:39
    miércoles, 20 de noviembre de 2013 0:39