XamlFlair es una biblioteca de código abierto para aplicaciones WPF, UWP y UNO que facilita enormemente la creación de animaciones sofisticadas a tus interfaces de usuario.
Con XamlFlair es muy sencillo crear animaciones complejas y personalizadas en XAML y C#, sin necesidad de escribir el código normal (que generalmente es bastante tedioso).
XamlFlair funciona mediante la definición de animaciones utilizando XAML y C# como recursos de la aplicación. Podemos crear nuestras propias animaciones, o emplear alguna de las predefinidas (solo en WPF).
Posteriormente, únicamente tenemos que aplicar la animación al objeto que queramos animar.
Cómo usar XamlFlair
Podemos agregar fácilmente XamlFlair a nuestro proyecto a través de un paquete NuGet. Simplemente tenemos que añadir el paquete correspondiente con nuestro tipo de proyecto. Por ejemplo, para WPF,
Install-Package XamlFlair.WPF
Ahora, añadimos el namespace XamlFlair en la cabecera de nuestro fichero Xaml.
xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF"
Y añadimos las animaciones predefinidas como recursos
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<xf:XamlFlairResources />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
<Border xf:Animations.Primary="{StaticResource FadeIn}" />
Animaciones custom
Además de las animaciones predefinidas, podemos crear nuestras propias animaciones
[<xf:AnimationSettings x:Key="PerspectiveVerticalRotation"
Kind="SwivelYFrom"
SwivelY="-45" />](<%3CPage.Resources%3E
<cor:Double x:Key="PopupScaleFactor">0.5</cor:Double>
<xf:AnimationSettings x:Key="FadeInAndContractAndBlur"
Kind="FadeFrom,ScaleXFrom,ScaleYFrom,BlurTo"
Opacity="0"
ScaleX="{StaticResource LargeScaleFactor}"
ScaleY="{StaticResource LargeScaleFactor}"
BlurRadius="12" />
</Page.Resources>>)
Y después la podríamos emplar de la siguiente forma
<Image Source="{Binding Image}"
Stretch="UniformToFill"
xf:Animations.Primary="{xf:Animate BasedOn={StaticResource FadeInAndContractAndBlur}, Duration=2000}" />
Animaciones combinadas
<xf:AnimationSettings x:Key="FadeInAndGrow"
Kind="FadeFrom,ScaleXFrom,ScaleXFrom"
Opacity="0"
ScaleX="{StaticResource SmallScaleFactor}"
ScaleY="{StaticResource SmallScaleFactor}" />
Sobreescribir parámetros
También es posible sobreescribir los valores de la animación que hemos definido como recurso directamente al aplicar la animación al elemento.
Por ejemplo,
<Border xf:Animations.Primary="{xf:Animate BasedOn={StaticResource ScaleFromBottom}, Delay=500}" />
Eventos
Por defecto las animaciones se ejecutan durante el evento Loaded
. Lo cuál no siempre será lo que queramos. Es posible cambiar el disparo de la animación a los siguientes eventos,
- Loaded (default value)
- Visibility (triggers only when Visibility == Visible)
- DataContextChanged (triggers when the value is not null)
- PointerOver
- PointerExit
- GotFocus
- LostFocus
Binding
Cuando ninguno de los eventos sean adecuados a nuestras necesidades, tenemos la opción más potente de vincular la animación al cambio de una variable bindeada.
Por ejemplo,
<Rectangle xf:Animations.PrimaryBinding="{Binding Animate}"
xf:Animations.Primary="{xf:Animate BasedOn={StaticResource FadeIn}, Event=None}" />
Disparara la animación cuando la variable Animate
sea true.
Adicionalmente, también es posible lanzar un comando cuando se finaliza la ejecución.
<TextBlock Text="Example of a completion command"
xf:Animations.Primary="{StaticResource FadeInAndSlideFromBottom}"
xf:Animations.PrimaryCompletionCommand="{x:Bind MyCustomCommand}" />
Como vemos, es una biblioteca muy potente para realizar animaciones de forma sencilla, y sin necesidad de demasiado código.
La librería tiene muchas más opciones, que están detalladas en la documentación del proyecto. También se proporcionan proyectos de ejemplo para WPF, UWP y UNO.
XamFlair es Open Source y todo el código se encuentra disponible en la página web del proyecto GitHub - XamlFlair/XamlFlair: XamlFlair is an animation library for UWP, WPF, and Uno, built to facilitate Xaml animations using only attached properties.