none
Entendiendo PropertyPath RRS feed

  • Pregunta

  • Hola, estos dias estuve viendo una forma de hacer animaciones desde el code-behind que en mi caso es C#, por la web vi algunos snippets que me permiten hacer eso, bueno, uno que encontre que se adecua a mis necesidades es el siguiente

    DoubleAnimationUsingKeyFrames anim = new DoubleAnimationUsingKeyFrames();
          anim.BeginTime = new TimeSpan(0, 0, 0);
    
          Storyboard.SetTargetName(anim, controlName);
          Storyboard.SetTargetProperty(anim
            , new PropertyPath("0.1[2].2"
              , new DependencyProperty[] 
              {
                UIElement.RenderTransformProperty
                , TransformGroup.ChildrenProperty
                , SkewTransform.AngleXProperty
              }
              )        
            );
    
          anim.KeyFrames.Add(new SplineDoubleKeyFrame(0, KeyTime.FromTimeSpan(new TimeSpan(0,0,0)), new KeySpline(.5, .5, .5, .5)));
          anim.KeyFrames.Add(new SplineDoubleKeyFrame(15, KeyTime.FromTimeSpan(new TimeSpan(0, 0, 1)), new KeySpline(.5, .5, .5, .5)));
    


    En si el anterior codigo tiene que ser adaptado para poder hacer el siguiente storyboard

    		<Storyboard x:Key="StbReestablecer">
    			<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="border">
    				<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
    				<EasingDoubleKeyFrame KeyTime="0:0:1" Value="1"/>
    			</DoubleAnimationUsingKeyFrames>
    		</Storyboard>
    


    En el ejemplo de codigo C# se indica que se manda al metodo una instancia de la clase PropertyPath, viendo por MSDN busque algo de informacion sobre esta clase, pero no entiendo que es realmente lo que hace,  mi pregunta es que significa la cadena que se envia como parametro, "0.1[2].2" no entiendo especificamentem, si cada numero representa un control en mi formulario o no se que.

    Gracias


    Serg
    viernes, 22 de julio de 2011 19:47

Respuestas

  • Saludos estuve leyendo la explicación de la cadenita "0.1[2].2" y para serte sincero no lo entendí muy bien, asi que te remito al sitio donde la encontré: http://msdn.microsoft.com/en-us/library/system.windows.propertypath.path.aspx, esperando que si lo puedas entender. Lo que si sé es que, hasta donde yo he creado animaciones, nunca he necesitado utilizar sintaxis semejante, aunque según la documentación es una opción.

    Respecto al PropertyPath, eso si lo se: las únicas propiedades que pueden ser objeto de animación son las Dependency Properties (que son un nuevo tipo de propiedad en WPF y Silverlight). Básicamente, para poder hacer referencia a una de estas propiedades se utiliza la clase PropertyPath.


    Blog: Silverideas
    • Marcado como respuesta SERGUIMANT viernes, 22 de julio de 2011 22:05
    viernes, 22 de julio de 2011 21:23
  • Hola Serg,

    El propertypath que tienes en tu ejemplo es un path "tokenizado", está explicado aquí http://msdn.microsoft.com/en-us/library/system.windows.propertypath.path.aspx, aunque por lo que veo en tu caso no te haría falta porque la única propiedad que quieres animar (según entiendo en tu ejemplo XAML) es la opacidad, bastaría con que declararas el targetproperty así:

     Storyboard.SetTargetProperty(anim, 
      new PropertyPath(UIElement.OpacityProperty));
    


    También tendrás que cambiar la animación con los keyframes tal como los tienes en el xaml.

    De todas maneras tendrías que replantearte el hacer las cosas así (por código) y buscar la manera de poder definir las animaciones en XAML, te será mucho más fácil de mantener... y de editar con el Blend :P

    Un saludo,

    -Juanma

     


    Juan Manuel Servera
    MCP
    twitter: @jmservera
    mi blog: http://jmservera.wordpress.com
    Únete al grupo de WP7 en LinkedIn
    • Marcado como respuesta SERGUIMANT viernes, 22 de julio de 2011 22:05
    viernes, 22 de julio de 2011 21:38

Todas las respuestas

  • Saludos estuve leyendo la explicación de la cadenita "0.1[2].2" y para serte sincero no lo entendí muy bien, asi que te remito al sitio donde la encontré: http://msdn.microsoft.com/en-us/library/system.windows.propertypath.path.aspx, esperando que si lo puedas entender. Lo que si sé es que, hasta donde yo he creado animaciones, nunca he necesitado utilizar sintaxis semejante, aunque según la documentación es una opción.

    Respecto al PropertyPath, eso si lo se: las únicas propiedades que pueden ser objeto de animación son las Dependency Properties (que son un nuevo tipo de propiedad en WPF y Silverlight). Básicamente, para poder hacer referencia a una de estas propiedades se utiliza la clase PropertyPath.


    Blog: Silverideas
    • Marcado como respuesta SERGUIMANT viernes, 22 de julio de 2011 22:05
    viernes, 22 de julio de 2011 21:23
  • Hola Serg,

    El propertypath que tienes en tu ejemplo es un path "tokenizado", está explicado aquí http://msdn.microsoft.com/en-us/library/system.windows.propertypath.path.aspx, aunque por lo que veo en tu caso no te haría falta porque la única propiedad que quieres animar (según entiendo en tu ejemplo XAML) es la opacidad, bastaría con que declararas el targetproperty así:

     Storyboard.SetTargetProperty(anim, 
      new PropertyPath(UIElement.OpacityProperty));
    


    También tendrás que cambiar la animación con los keyframes tal como los tienes en el xaml.

    De todas maneras tendrías que replantearte el hacer las cosas así (por código) y buscar la manera de poder definir las animaciones en XAML, te será mucho más fácil de mantener... y de editar con el Blend :P

    Un saludo,

    -Juanma

     


    Juan Manuel Servera
    MCP
    twitter: @jmservera
    mi blog: http://jmservera.wordpress.com
    Únete al grupo de WP7 en LinkedIn
    • Marcado como respuesta SERGUIMANT viernes, 22 de julio de 2011 22:05
    viernes, 22 de julio de 2011 21:38
  • Bueno, muchas gracias por las dos respuestas, me fueron de mucha utilidad, respecto a crear las animaciones en el code-behind, bueno mi aplicacion siempre tendra una ventana padre abierta y cuando se seleccione otra opcion se abrira solo una ventana hija, y la hija se tiene que cerrar para poder ir a la ventana principal. Bueno, el asunto es que utilzo las mismas animaciones para abrir el formulario hijo y esconder el padre, y la de cerrar el form hijo y re aparecer el padre, bueno tenia practicamente el mismo codigo xaml en todas mis ventanas, y bueno no parecia elegante, asi que decidi hacerlo proceduralmente, y bueno les agradeceria si mi muestran una forma de hacerlo mediante xaml si es eso mas recomendable. De todos modos muchas gracias solucionaron mi duda.

    Saludos


    Serg
    viernes, 22 de julio de 2011 22:17