2016-01-27 3 views
0

большое спасибо заранее.WPF Animation StoryBoard SpeedRatio меняется, но не имеет эффекта

Я натолкнулся на странное поведение. У меня есть метод ниже, который называется правильно, никаких проблем не найдено. AnimationRunning - логическое значение, которое правильно оценивает true, но фактическая скорость анимации остается прежней, даже если значение, сохраненное в SpeedRatio, изменяется (как видно на ярлыке строки состояния), фактическая скорость анимации остается неизменной.

private void TextBoxTyping(object sender, KeyEventArgs e) 
    { 
     if (AnimationRunning == true) { StoryBoard.SpeedRatio += 5; }; 
     statusbar.Content = "Speed: " + StoryBoard.SpeedRatio.ToString(); 
    } 

Чтобы проверить, оценивает ли AnimationRunning к истине, я выскочил в MessageBox.Show («Анимация работает»); внутри закрытие. И сообщение выскочит.

Однако, если изменить код на следующее:

private void TextBoxTyping(object sender, KeyEventArgs e) 
    { 
     StoryBoard.SpeedRatio += 5; 
     statusbar.Content = "Speed: " + StoryBoard.SpeedRatio.ToString(); 
    } 

Скорость анимации делает изменения. Я не могу понять, как с AnimationRunning быть правдой, я не могу заставить SpeedRatio работать внутри оператора if ...

Может помочь свету в этом бедном моем уме? Спасибо ...

+0

StoryBoard существует внутри открытого частичного класса MainWindow: Window –

+0

Не уверен, что я полностью не могу изменить. Я могу изменить скорость анимации во время ее запуска, если применить изменение скорости за пределами if-statement. –

+1

Speed! = Timeline, мой плохой. Я бы рекомендовал вам написать [mcve] (http://stackoverflow.com/help/mcve). Есть большие шансы, что вы сами обнаруживаете проблему (обычно, когда вы не можете воспроизвести проблему). Если вам это удастся, опубликуйте его здесь, некоторые важные детали отсутствуют в вашем примере кода в настоящее время. – Sinatr

ответ

0

Чтобы установить интерактивное соотношение скоростей часов, созданных для этой раскадровки, используйте Storyboard.SetSpeedRatio.

Из MSDN: Для интерактивного управления этим раскадровки, вы должны использовать тот же параметр containingObject при вызове интерактивных методов , которые вы использовали, чтобы начать раскадровку. Управляемый раскадровка может приостанавливать, возобновлять, искать, останавливать и удалять. Чтобы сделать раскадровку управляемой в коде, вы должны использовать соответствующую перегрузку метода Begin и указать true, чтобы сделать его управляемым.

+0

Я пробовал это, по-прежнему нет ошибки и не изменял скорость анимации, но теперь скорость, указанная на ярлыке строки состояния, не изменяется. Если я использую SpeedRatio вместо этого, скорость будет правильно сообщена. –

+0

Привет, Можете ли вы убедиться, что ваша раскадровка управляема. «Чтобы сделать раскадровку управляемой в коде, вы должны использовать соответствующую перегрузку метода Begin для раскадровки и указать true, чтобы сделать ее управляемой». – Sivasubramanian

Смежные вопросы