Как программно анимировать изображение из одной точки в другую с помощью холста WPF?

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

Я тоже поискал в интернете и нашел это! пример.

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Shapes;
using System.Windows.Media.Animation;
using System.Windows.Media;

namespace SDKSamples
{
// This example shows how to use PointAnimation to animate the
// position of an ellipse by animating the Center property of an 
// EllipseGeometry. PointAnimation is used because the Center property
// takes a Point value.
public class PointAnimationExample : Page
{
    public PointAnimationExample()
    {

        // Create a NameScope for this page so that
        // Storyboards can be used.
        NameScope.SetNameScope(this, new NameScope());

        EllipseGeometry myEllipseGeometry = new EllipseGeometry();
        myEllipseGeometry.Center = new Point(200, 100);
        myEllipseGeometry.RadiusX = 15;
        myEllipseGeometry.RadiusY = 15;

        // Assign the EllipseGeometry a name so that
        // it can be targeted by a Storyboard.
        this.RegisterName(
            "MyAnimatedEllipseGeometry", myEllipseGeometry);

        Path myPath = new Path();
        myPath.Fill = Brushes.Blue;
        myPath.Margin = new Thickness(15);
        myPath.Data = myEllipseGeometry;

        PointAnimation myPointAnimation = new PointAnimation();
        myPointAnimation.Duration = TimeSpan.FromSeconds(2);

        // Set the animation to repeat forever. 
        myPointAnimation.RepeatBehavior = RepeatBehavior.Forever;

        // Set the From and To properties of the animation.
        myPointAnimation.From = new Point(200, 100);
        myPointAnimation.To = new Point(450, 250);

        // Set the animation to target the Center property
        // of the object named "MyAnimatedEllipseGeometry."
        Storyboard.SetTargetName(myPointAnimation, "MyAnimatedEllipseGeometry");
        Storyboard.SetTargetProperty(
            myPointAnimation, new PropertyPath(EllipseGeometry.CenterProperty));

        // Create a storyboard to apply the animation.
        Storyboard ellipseStoryboard = new Storyboard();
        ellipseStoryboard.Children.Add(myPointAnimation);

        // Start the storyboard when the Path loads.
        myPath.Loaded += delegate(object sender, RoutedEventArgs e)
        {
            ellipseStoryboard.Begin(this);
        };

        Canvas containerCanvas = new Canvas();
        containerCanvas.Children.Add(myPath);

        Content = containerCanvas;
    }

}

}

Я пробовал этот код и его работы. Но когда я запускаю приложение, дороги, которые я нарисовал ранее, больше не отображаются. Итак, как я могу перемещать свои поезда по моей железной дороге?

Вместо того, чтобы показывать рабочий код, который вы нашли в Интернете, покажите нам код твой и объясните, с какими его частями у вас возникли проблемы. Обратите также внимание, что код, который вы нашли, слишком сложен. Вам не нужна раскадровка для анимации центра EllipseGeometry.

Clemens 22.05.2019 16:54

И если предполагается, что объект поезда будет анимироваться вдоль железной дороги, вы обязательно должны использовать ТочкаАнимацияИспользованиеПути.

Clemens 22.05.2019 17:06

Исправлено, чтобы читать более четко на английском языке, сохраняя при этом первоначальный замысел.

Jeremy E 22.05.2019 21:52
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
2
3
598
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я продолжил поиск и нашел решение. Я использовал экземпляр DoubleAnimation. Рабочий код ниже.

        public void move( Image target, double oldX, double oldY, double newX, 
        double newY,int time)
        {
        TranslateTransform trans = new TranslateTransform();
        target.RenderTransform = trans;

        DoubleAnimation anim1 = new DoubleAnimation(oldY, newY, 
TimeSpan.FromSeconds(time));
        anim1.RepeatBehavior = RepeatBehavior.Forever;
        trans.BeginAnimation(TranslateTransform.YProperty, anim1);

        DoubleAnimation anim2 = new DoubleAnimation(oldX, newX, 
TimeSpan.FromSeconds(time));
        anim2.RepeatBehavior = RepeatBehavior.Forever;
        trans.BeginAnimation(TranslateTransform.XProperty, anim2);
    }

Другие вопросы по теме