Compartir a través de


AnimationBehavior

AnimationBehavior es un Behavior que proporciona la capacidad de animar cualquier VisualElement al que se adjunte. De forma predeterminada, un TapGestureRecognizer se adjunta al VisualElement y desencadena la animación asociada cuando ese reconocedor detecta que el usuario pulsó o clicó en el VisualElement.

La propiedad AnimationType debe establecerse. Se pueden encontrar posibles opciones para esto en Animaciones.

Importante

Los comportamientos del kit de herramientas de la comunidad .NET MAUI no establecen el elemento BindingContext de un comportamiento, ya que los comportamientos se pueden compartir y aplicar a varios controles a través de estilos. Para obtener más información, consulte Comportamientos de .NET MAUI

Sintaxis

En los ejemplos siguientes, se muestra cómo agregar el AnimationBehavior a un Label y usar el FadeAnimation para animar un cambio en la opacidad.

XAML

Incluir el espacio de nombres XAML

Para usar el kit de herramientas en XAML, es necesario agregar el siguiente xmlns a la página o vista:

xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"

Por lo tanto, el siguiente:

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">

</ContentPage>

Se modificaría para incluir el xmlns de la siguiente manera:

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">

</ContentPage>

Uso de AnimationBehavior

<ContentPage 
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
    x:Class="CommunityToolkit.Maui.Sample.Pages.Behaviors.AnimationBehaviorPage"
    x:Name="Page">

    <Label Text="Click this Label">
        <Label.Behaviors>
            <toolkit:AnimationBehavior>
                <toolkit:AnimationBehavior.AnimationType>
                    <toolkit:FadeAnimation Opacity="0.5" />
                </toolkit:AnimationBehavior.AnimationType>
            </toolkit:AnimationBehavior>
        </Label.Behaviors>
    </Label>

</ContentPage>

C#

El AnimationBehavior se puede usar de la siguiente manera en C#:

class AnimationBehaviorPage : ContentPage
{
    public AnimationBehaviorPage()
    {
        var label = new Label
        {
            Text = "Click this Label"
        };

        var animationBehavior = new AnimationBehavior
        {
            AnimationType = new FadeAnimation
            {
                Opacity = 0.5
            }
        };

        label.Behaviors.Add(animationBehavior);

        Content = label;
    }
}

Marcado de C#

Nuestro paquete CommunityToolkit.Maui.Markup proporciona una forma mucho más concisa de usar este Behavior en C#.

using CommunityToolkit.Maui.Markup;

class AnimationBehaviorPage : ContentPage
{
    public AnimationBehaviorPage()
    {
        Content = new Label()
            .Text("Click this label")
            .Behaviors(new AnimationBehavior
            {
                AnimationType = new FadeAnimation
                {
                    Opacity = 0.5
                }
            });
    }
}

En la captura de pantalla siguiente, se muestra el AnimationBehavior resultante en Android: Captura de pantalla de AnimationBehavior en Android

Ejemplos adicionales

Control de la interacción del usuario

AnimationBehavior responde a pulsaciones y clics por el usuario. Es posible controlar esta interacción a través de la propiedad Command en el comportamiento.

En el ejemplo siguiente, se muestra cómo adjuntar el AnimationBehavior a un Image y enlazar la propiedad Command a una propiedad en un modelo de vista.

Ver

<Image Source="thumbs-up.png" x:Name="ThumbsUpImage">
    <Image.Behaviors>
        <toolkit:AnimationBehavior 
            Command="{Binding ThumbsUpCommand}"
            BindingContext="{Binding Path=BindingContext, Source={x:Reference ThumbsUpImage}, x:DataType=Image}">
            <toolkit:AnimationBehavior.AnimationType>
                <toolkit:FadeAnimation />
            </toolkit:AnimationBehavior.AnimationType>
        </toolkit:AnimationBehavior>
    </Image.Behaviors>
</Image>

Modelo de vista


public ICommand ThumbsUpCommand { get; }

public MyViewModel()
{
    ThumbsUpCommand = new Command(() => OnThumbsUp())
}

public void OnThumbsUp()
{
    // perform the thumbs up logic.
}

Desencadenamiento mediante programación de la animación

AnimationBehavior proporciona la capacidad de desencadenar animaciones mediante programación. AnimateCommand se puede ejecutar para desencadenar el tipo de animación asociado.

En el ejemplo siguiente, se muestra cómo agregar el AnimationBehavior a un Entry, enlazar el AnimatedCommand y, a continuación, ejecutar el comando desde un modelo de vista.

Ver

<Entry Placeholder="First name (Required)"
       Text="{Binding FirstName}"
       x:Name="FirstNameEntry">
    <Entry.Behaviors>
        <toolkit:AnimationBehavior 
            AnimateCommand="{Binding TriggerAnimationCommand}"
            BindingContext="{Binding Path=BindingContext, Source={x:Reference FirstNameEntry}, x:DataType=Entry}">
            <toolkit:AnimationBehavior.AnimationType>
                <toolkit:FadeAnimation />
            </toolkit:AnimationBehavior.AnimationType>
        </toolkit:AnimationBehavior>
    </Entry.Behaviors>
</Entry>

Modelo de vista

private string firstName;

public string FirstName
{
    get => firstName;
    set => SetProperty(ref firstName, value);
}

public ICommand TriggerAnimationCommand { get; set; }

public void Save()
{
    if (string.IsNullOrEmpty(FirstName))
    {
        TriggerAnimationCommand.Execute(CancellationToken.None);
        return;
    }

    // save code.
}

Nota:

La propiedad AnimateCommand es de solo lectura y espera un modo de enlace de BindingMode.OneWayToSource. Tampoco es necesario asignar un valor a la propiedad de comando en el modelo de vista (TriggerAnimationCommand en el ejemplo anterior). Esto se debe a que el enlace asignará el valor a la propiedad a partir del valor creado en el AnimationBehavior.

Esto proporciona la capacidad de desencadenar una animación desde un modelo de vista.

Desencadenamiento de la animación a partir de eventos de control

El AnimationBehavior proporciona las mismas características subyacentes que el EventToCommandBehavior. Mediante el uso de la propiedad EventName, se puede desencadenar el tipo de animación asociado cuando se genere un evento que coincida con el nombre proporcionado.

Con la siguiente implementación de animación de ejemplo:

class SampleScaleToAnimation : BaseAnimation
{
    public double Scale { get; set; }

    public override Task Animate(VisualElement view) => view.ScaleTo(Scale, Length, Easing);
}

En el ejemplo siguiente, se muestra cómo se pueden asignar dos instancias de AnimationBehavior a un Entry; una para desencadenar una animación cuando se genere el evento Centrado y otra para desencadenar una animación diferente cuando se genere el evento Descentrado.

<Entry Placeholder="Animate on Focused and Unfocused">
    <Entry.Behaviors>
        <toolkit:AnimationBehavior EventName="Focused">
            <toolkit:AnimationBehavior.AnimationType>
                <behaviorPages:SampleScaleToAnimation 
                    Easing="{x:Static Easing.Linear}"
                    Length="100"
                    Scale="1.05"/>
            </toolkit:AnimationBehavior.AnimationType>
        </toolkit:AnimationBehavior>

        <toolkit:AnimationBehavior EventName="Unfocused">
            <toolkit:AnimationBehavior.AnimationType>
                <behaviorPages:SampleScaleToAnimation 
                    Easing="{x:Static Easing.Linear}"
                    Length="100"
                    Scale="1"/>
            </toolkit:AnimationBehavior.AnimationType>
        </toolkit:AnimationBehavior>
    </Entry.Behaviors>
</Entry>

Ejemplos

Puede encontrar un ejemplo de este comportamiento en acción en la Aplicación de muestra del kit de herramientas de la comunidad de .NET MAUI.

API

Puede encontrar el código fuente de AnimationBehavior en el repositorio de GitHub del Kit de herramientas de la comunidad de .NET MAUI.