Ошибка анимации пути WPF - PullRequest
       2

Ошибка анимации пути WPF

1 голос
/ 29 ноября 2010

Я настроил раскадровку для анимации эллипса по заданному пути, как показано здесь: http://msdn.microsoft.com/en-us/library/ms743217.aspx, внес несколько изменений в соответствии с моими потребностями.Однако, когда я пытаюсь запустить мою программу, она вызывает исключение AnimationException:

Cannot animate the 'Center' property on a 'System.Windows.Media.EllipseGeometry' using a 'System.Windows.Media.Animation.PointAnimationUsingPath'. For details see the inner exception.

Внутреннее исключение просто утверждает: Value does not fall within the expected range..Я никогда раньше не использовал раскадровку, поэтому понятия не имею, что здесь делать.

РЕДАКТИРОВАТЬ: Вот мой код, как он есть.Он претерпел некоторые изменения, и я еще не удалил старые комментарии, поэтому примите как есть.

        Location current = null;// locationEnum.Current;
        Point start = new Point();
        var segment = new PolyBezierSegment();
        foreach (var location in locations) {
            if (current == null) {
                current = location;
                start = new Point(current.X, current.Y);
            }
            else {
                //MessageBox.Show(location.X.ToString() + "," + location.Y.ToString());
                segment.Points.Add(new Point(location.X, location.Y));
                //current = location;
            }
        }
        //MessageBox.Show(start.ToString());
        var ellipseGeometry = new EllipseGeometry(start, 15, 15);
        var ellipsePath = new System.Windows.Shapes.Path {
            Fill = new SolidColorBrush(Colors.Red),
            Data = ellipseGeometry,
            Margin = new Thickness(15)
        };
        cnvMap.Children.Add(ellipsePath);
        var animationPath = new PathGeometry();
        var figure = new PathFigure();
        figure.StartPoint = start;
        figure.Segments.Add(segment);
        animationPath.Figures.Add(figure);
        animationPath.Freeze();
        var animation = new PointAnimationUsingPath {
            PathGeometry = animationPath,
            Duration = TimeSpan.FromSeconds(10)
        };
        Storyboard.SetTarget(animation, ellipseGeometry);
        Storyboard.SetTargetProperty(
            animation, new PropertyPath(EllipseGeometry.CenterProperty));
        Storyboard storyboard = new Storyboard();
        storyboard.Children.Add(animation);
        ellipsePath.Loaded += (sender, e) => {
            //MessageBox.Show("Horray");
            storyboard.Begin();
        };

1 Ответ

1 голос
/ 29 ноября 2010

Я не могу решить вашу проблему, но я могу рассказать вам, как бы отладить ее:

  • Вариант 1 : замените ваш код на что-то максимально близкоес примером кода, который вы связали (и который, как ожидается, будет работать).Затем медленно начинайте применять ваши изменения, пока они не перестанут работать.Последнее внесенное вами изменение, скорее всего, является причиной проблемы.Если это не поможет, опубликуйте код здесь, с обеими версиями проблемной строки кода.

  • Опция 2 : скажите Visual Studio, чтобы она остановилась на всехисключения (Строка меню / Отладка / Исключения) и попытайтесь поймать момент, когда выдается внутреннее исключение.Изучите стек вызовов и окно локальных переменных, чтобы выяснить , какое значение находится "вне ожидаемого диапазона".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...