Анимация замораживает значение, которое она оживляет? - PullRequest
0 голосов
/ 09 сентября 2011

Я работаю над созданием кнопки «слайд для разблокировки» для дерьма и хихиканья в WPF.У меня есть два изображения для отображения: внешний черный ящик (SwipeBack), который неподвижен, и внутренний белый ящик (SwipeBar), который является ползунком.OnTouchDown изображения слайдера, я установил для bool IsDragging значение true.OnTouchMove, я перемещаю изображение, настраивая его левое поле (может быть, есть лучший способ, но это работает).Вот код OnTouchMove:

    private void SwipeBar_TouchMove(object sender, TouchEventArgs e) {
        if (IsDragging) {
            int x = (int)e.GetTouchPoint(SwipeBack).Position.X;
            int left = (int)(x - SwipeBar.ActualWidth / 2);
            left = Math.Max(15, left);
            left = Math.Min(left, (int)(SwipeBack.ActualWidth - 15 - SwipeBar.ActualWidth));
            Thickness m = SwipeBar.Margin;
            m.Left = left;
            SwipeBar.Margin = m;
        }
    }

В моем событии OnTouchUp я установил IsDragging обратно в false и запустил анимацию, чтобы вернуть SwipeBar обратно в положение покоя левой руки (обратно вс полем 15) вот этот код:

    private void SwipeBar_TouchUp(object sender, TouchEventArgs e) {
        IsDragging = false;
        ThicknessAnimation slideBack = new ThicknessAnimation();
        slideBack.From = SwipeBar.Margin;
        Thickness to = SwipeBar.Margin;
        to.Left = 15;
        slideBack.To = to;
        ExponentialEase ease = new ExponentialEase();
        ease.Exponent = 7;
        slideBack.EasingFunction = ease;
        SwipeBar.BeginAnimation(Image.MarginProperty, slideBack);
    }

Проблема, с которой я столкнулся, заключается в том, что после первого запуска анимации я больше не могу манипулировать полем SwipeBar для создания другого слайда.Я новичок в WPF и особенно в анимациях WPF, но я считаю, что не могу изменить поле после первой анимации из-за анимации.Я пытался дать анимации длительность, но даже после того, как время истекло (или количество повторов), поле все равно не может быть изменено.

1 Ответ

0 голосов
/ 10 сентября 2011

Существует статья MSDN об этом поведении, я думаю, что она применима и к анимациям без раскадровки: Как: установить свойство после его анимации с помощью раскадровки

(Только опция remove-storyboard не имеет значения)

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