Как я могу приостановить раскадровку? - PullRequest
2 голосов
/ 15 марта 2011

Кажется, что это должно быть легко, но я не могу заставить раскадровку WPF остановиться. Я звоню в Pause, и ничего не происходит - он продолжает анимацию.

Вот случай воспроизведения: кнопка, которая анимирует свою ширину. Если вы нажмете кнопку, она вызовет паузу на раскадровке. Я ожидаю, что, как только я нажму кнопку, ее ширина перестанет меняться; вместо этого его ширина продолжает анимацию, как будто я никогда не вызывал Pause.

NameScope.SetNameScope(this, new NameScope());
var storyboard = new Storyboard();

var button = new Button { Content = "Pause", Name = "pause" };
this.Content = button;
RegisterName(button.Name, button);
var animation = new DoubleAnimation(0, 200, TimeSpan.FromSeconds(5));
Storyboard.SetTargetName(animation, button.Name);
Storyboard.SetTargetProperty(animation,
    new PropertyPath(FrameworkElement.WidthProperty));
storyboard.Children.Add(animation);

button.Click += (sender, e) => { storyboard.Pause(this); };
storyboard.Begin(this);

Из того, что я понимаю о документах, я должен вызвать перегрузку Pause(FrameworkElement) с тем же параметром, который я передал Begin, следовательно, Pause(this) выше. Но я также попробовал storyboard.Pause(), без изменений в поведении. Я также попробовал storyboard.Pause(button) просто так, опять же, без эффекта. Я бы попытался storyboard.Pause(storyboard) и storyboard.Pause(animation) просто исчерпать возможности, но ни один из них не компилируется - ему нужен FrameworkElement (или FrameworkContentElement).

Как заставить паузу остановиться?

1 Ответ

4 голосов
/ 15 марта 2011

Я не знаю, почему вы используете этот уставший SetNameScope и т. Д. Очистив ваш код, я мог бы заставить его работать:

        //NameScope.SetNameScope(this, new NameScope());
        var storyboard = new Storyboard();

        var button = new Button { Content = "Pause", Name = "pause" };
        this.Content = button;
        //RegisterName(button.Name, button);
        var animation = new DoubleAnimation(0, 200, TimeSpan.FromSeconds(5));
        Storyboard.SetTarget(animation, button);
        Storyboard.SetTargetProperty(animation,
            new PropertyPath(FrameworkElement.WidthProperty));
        storyboard.Children.Add(animation);

        button.Click += (sender, e) => { storyboard.Pause(); };
        storyboard.Begin();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...