0

При запуске программы , запускается а после того как нажимаешь на кнопку старта, выдаёт данную ошибку:
Полю "MainWindow.propertyToAnimate" нигде не присваивается значение, поэтому оно всегда будет иметь значение по умолчанию null. введите сюда описание изображения

using System; using System.Collections.Generic; using System.Linq;
using System.Text; using System.Threading.Tasks; using System.Windows;
using System.Windows.Controls; using System.Windows.Data; using
System.Windows.Documents; using System.Windows.Input; using
System.Windows.Media; using System.Windows.Media.Imaging; using
System.Windows.Navigation; using System.Windows.Shapes; using
System.Windows.Media.Animation;

namespace WpfApp1 { /// <summary> /// Логика взаимодействия для MainWindow.xaml /// </summary> public sealed partial class MainWindow : Window { Random random = new Random(); private PropertyPath propertyToAnimate;

    public MainWindow()
    {
        InitializeComponent();
    }

    public Duration Duration { get; private set; }
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        AddEnemy();
    }

    private void AddEnemy()
    {
         ContentControl enemy = new ContentControl();
         enemy.Template = Resources[&quot;EnemyTemplate&quot;] as ControlTemplate;
         AnimateEnemy(enemy, 0 , playArea.ActualWidth - 100, &quot;(Canvas.Left)&quot;);
         AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 100),
              random.Next((int)playArea.ActualHeight - 100), &quot;(Canvas.Top)&quot;);
         playArea.Children.Add(enemy);
    }

    private void AnimateEnemy(ContentControl enemy, double from, double to, string properetyToAnimate)
    {
        Storyboard storyboard = new Storyboard() { AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever };
        DoubleAnimation animation = new DoubleAnimation();
        {
            double From = from;
            double To = to;
            Duration = new Duration(TimeSpan.FromSeconds(random.Next(4, 6)));
        };
        Storyboard.SetTarget(animation, enemy);
        PropertyPath propertyToAnimate = this.propertyToAnimate;
        Storyboard.SetTargetProperty(animation, propertyToAnimate);
        storyboard.Children.Add(animation);
        storyboard.Begin();
    }
} 

}

aepot
  • 49,560

1 Answers1

1

Метод не должен принимать null параметры, а полю propertyToAnimate у вас, судя по всему нигде не присваивается значение, о чем и говорит ошибка.

SmorcIRL
  • 806
  • Скажи пожалуйста, какое значение я могу ему присвоить и как, что бы всё заработало? Заранее благодарю тебя. – Алексей Jan 12 '21 at 13:31
  • 1
    @Алексей Путь к тому свойсту элемента, которое хотите анимировать, если я правильно понимаю. Учите WPF и XAML, посмотрите пример из ссылки на документацию. – SmorcIRL Jan 12 '21 at 13:36
  • @Алексей У вас в метод AnimateEnemy передается как раз этот путь в виде строки properetyToAnimate. Соответственно в метод SetTargetProperty передаете new PropertyPath(properetyToAnimate) – SmorcIRL Jan 12 '21 at 13:42
  • 1
    Всем спасибо за ответы! Починил а насчёт WPF и XAML, я как раз и занимаюсь их изучением на данный момент. Ещё раз всем спасибо! – Алексей Jan 12 '21 at 13:54
  • @Алексей пример очень простой игры в WPF, без анимаций, но показан именно тот способ, который является самым удобным для WPF. Разберите его, лишним не будет. – aepot Jan 12 '21 at 17:23