@Wolfak

Как переместить объект в C# WPF?

Пробую сделать простенькое приложение, но никак не могу разобраться, как сделать передвижение объектов (изображения).

Делаю это так:
XAML:
<Canvas x:Name="main" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Image Height="767" Canvas.Top="0" Width="1365" x:Name="Ground" Source="images/land.jpg" Stretch="UniformToFill" Canvas.Left="0"/>
    </Canvas>

C#:
enum CellType { Empty, Visited, Sun };

        CellType[,] Board = new CellType[41, 41];
        public MainPage()
        {
            this.InitializeComponent();
            SetupSuns();
            timerStart();
        }
        public int x = 31;
        public int y = 4;
        public void SetupSuns()
        {
                var ninja = new Image();
                ninja.Source = new BitmapImage(new Uri("ms-appx:/images/ninjarun.png"));
                if (x == 31)
                {
                    ninja.Source = new BitmapImage(new Uri("ms-appx:/images/ninjarun2.png"));
                }
                ninja.Width = 32;
                ninja.Height = 39;
                Board[x, y] = CellType.Sun;
                main.Children.Add(ninja);
                Canvas.SetLeft(ninja, x * 40);
                Canvas.SetTop(ninja, y * 40);
        }
        private DispatcherTimer timer = null;
        private void timerStart()
        {
            timer = new DispatcherTimer();  // если надо, то в скобках указываем приоритет, например DispatcherPriority.Render
            timer.Tick += (sender, e) =>
            {
                x++;
                Canvas.SetLeft(ninja, x * 40);
                if (x == 50)
                {
                    timer.Stop();
                }
            };
            timer.Interval = new TimeSpan(0, 0, 0, 0, 500);
            timer.Start();
        }
    }


Только учусь писать приложения на C#, поэтому нужна ваша помощь.
Нужно чтобы созданное изображение ninja перемещалось с помощью таймера по оси переменной x.
Что в данный момент и не работает.

Также интересно, как можно решить эту же проблему и с несколькими подобными движущимися объектами? Как обратиться к объекту ninja из одного класса в другом и изменить его свойство(x)?
  • Вопрос задан
  • 9101 просмотр
Решения вопроса 1
@asvishnyakov
Программист
Вместо таймера используйте анимацию. В данном случае — DoubleAnimation или DoubleAnimationUsingKeyFrames. Изменять надо не свойство x, а Canvas.Left; можно использовать трансформацию, она работает и в других контейнерах.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы