如何将XAML代码的动画转换为c#

本文关键字:动画 转换 代码 XAML | 更新日期: 2023-09-27 17:52:48

当我的from和to值动态变化时,我如何将这段XAML代码转换为c#中的代码隐藏?

XAML

<Window.Triggers>
    <EventTrigger RoutedEvent="Window.Loaded">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation BeginTime="00:00:00"    
                            From="200"
                            To="500"
                            Storyboard.TargetProperty="(Window.Top)"    
                            AccelerationRatio=".1"   
                            Duration="0:0:.2" />
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Window.Triggers>

如何将XAML代码的动画转换为c#

你不需要Storyboard从后面的代码,这可以只与DoubleAnimation。

public MainWindow()
{
    InitializeComponent();
    Loaded += (s, e) =>
       {
          DoubleAnimation animation = new DoubleAnimation(200, 500, 
                                          TimeSpan.FromSeconds(0.2));
          animation.AccelerationRatio = 0.1;
          BeginAnimation(Window.TopProperty, animation);
       };
}

试试这个:

XAML

<Window x:Class="CreateAnimationinCodeHelp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Name="MyWindow" Loaded="Window_Loaded"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Label Background="AliceBlue" Content="Test" />
    </Grid>
</Window>

Code-behind

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        Storyboard sb = new Storyboard();
        DoubleAnimation doubleAnimation = new DoubleAnimation();
        doubleAnimation.From = 200;
        doubleAnimation.To = 500;
        doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(0.2));
        doubleAnimation.AccelerationRatio = 0.1;
        Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath("(Window.Top)"));
        sb.Children.Add(doubleAnimation);
        MyWindow.BeginStoryboard(sb);
    }
}