Подтвердить что ты не робот

Создание раскадровки в коде в WPF

Следующий код работает нормально.

<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>

Но в этом случае значения From и To являются статическими. Мне нужно передать значения динамического разрешения системы. Поэтому мне нужно, чтобы он был создан в коде. Можно ли это сделать?

Как преобразовать его в codebehind?

4b9b3361

Ответ 1

При работе в коде вам не нужна раскадровка, просто анимация для основных вещей, как вы показываете в своем вопросе. Я сделал небольшой образец, чтобы показать, как легко это работает.

Это полный код основного окна:

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);
        }
    }
}

Вот как выглядит 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>

Поместите это в приложение WPF и посмотрите, как он работает, экспериментируйте с ним и попробуйте другие анимации/свойства.

Ответ 2

Добавление кода примера комментариев djerry будет выглядеть следующим образом:

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

wnd.BeginAnimation(Window.LeftProperty, anim); 

и вы должны будете иметь этот код в обработчике событий, загруженных окном. Надеюсь, это поможет.