web-dev-qa-db-fra.com

Création de Storyboard en code derrière dans WPF

Le code suivant fonctionne correctement.

<Window.Triggers>
    <EventTrigger RoutedEvent="Window.Loaded">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Duration="0:0:.8" Storyboard.TargetProperty="Left" From="1920" To="0" AccelerationRatio=".1"/>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Window.Triggers>

Mais dans ce From et To les valeurs sont statique. J'ai besoin de passer les valeurs de la résolution système basée dynamiquement. J'ai donc besoin qu'il soit créé en code derrière. Est-il possible de faire?

Comment le convertir en codebehind?

25
Raj

Lorsque vous travaillez dans du code, vous n'avez pas vraiment besoin de Storyboard, juste des animations pour les choses de base, comme vous le montrez dans votre question. J'ai fait un petit échantillon pour montrer à quel point cela fonctionne.

Voici le code complet derrière la fenêtre principale:

namespace WpfCSharpSandbox
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            WidenObject(150, TimeSpan.FromSeconds(1));
        }

        private void WidenObject(int newWidth, TimeSpan duration)
        {
            DoubleAnimation animation = new DoubleAnimation(newWidth, duration);
            rctMovingObject.BeginAnimation(Rectangle.WidthProperty, animation);
        }
    }
}

Voici à quoi ressemble le XAML:

<Window x:Class="WpfCSharpSandbox.MainWindow"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        Title="Sandbox" Height="350" Width="525">
    <Grid Background="#333333">
        <Rectangle x:Name="rctMovingObject" Fill="LimeGreen" Width="50" Height="50"/>
    </Grid>
</Window>

Mettez-le dans une application WPF et voyez comment cela fonctionne, expérimentez-le et essayez d'autres animations/propriétés.

39
Terry

L'ajout de l'exemple de code de commentaire de djerry ressemblerait à ceci:

var anim = new DoubleAnimation {
                                From = 1920, 
                                To = 1, 
                               };

wnd.BeginAnimation(Window.LeftProperty, anim); 

et vous devriez avoir ce code dans le gestionnaire d'événements chargé dans la fenêtre. J'espère que cela t'aides.

2
sthotakura