Программно перевернуть раскадровку - PullRequest
2 голосов
/ 21 декабря 2009

У меня есть следующая раскадровка:

<Window.Resources>
    <Storyboard x:Key="ButtonsAnim">
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="topRightButton" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
            <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
            <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="-100"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="topRightButton" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
            <SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
            <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="100"/>
...

Он в основном перемещает некоторые кнопки на холсте.

Это код, который запускает анимацию:

void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    Storyboard sb = (Storyboard)Resources["ButtonsAnim"];
    storyBoard = sb;
    storyBoard.Begin(this, true);

}

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

Я пытался использовать storyBoard.Begin (это правда), когда приложение появляется снова, но в течение первых миллисекунд кнопки находятся в последней позиции.

Затем я попробовал storyBoard.seek (TimeSpan.Zero), прежде чем скрыть окно, но оно не работает:

System.Windows.Media.Animation Предупреждение: 6: Невозможно выполнить действие потому что указанный раскадровка была никогда не применяется к этому объекту для интерактивное управление .; Действие = 'Seek'; StoryBoard = 'System.Windows.Media.Animation.Storyboard'; Storyboard.HashCode = '24901833'; Storyboard.Type = 'System.Windows.Media.Animation.Storyboard'; TargetElement = 'System.Windows.Media.Animation.Storyboard'; TargetElement.HashCode = '24901833'; TargetElement.Type = 'System.Windows.Media.Animation.Storyboard'

Я также пробовал storyBoard.remove (this) перед тем, как скрыть окно, тот же эффект: кнопки находятся в последней позиции.

Есть идеи?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Чтобы использовать StoryBoard.Remove() таким образом, вы должны сохранить ссылку на свой объект раскадровки.

Как это:

Storyboard myStoryBoard; 

void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    myStoryBoard = (Storyboard)Resources["myStoryBoard"];
    myStoryBoard.Begin();

}

void sbRemoveEvent()
{
    myStoryBoard.Remove();  
}
1 голос
/ 21 декабря 2009

Я думаю Storyboard.Stop() должно работать здесь. Но если вы не найдете ничего элегантного, вы можете попробовать сбросить кнопки трансформации после того, как вы скрыли окно. E.g.:

((TranslateTransform)((TransformGroup)topRightButton.RenderTransform)[3]).X = 0;
((TranslateTransform)((TransformGroup)topRightButton.RenderTransform)[3]).Y = 0;

Надеюсь, я не ошибся во время чтения.

Примечание: вы также можете найти этот пример из MSDN: Как: управлять раскадровкой после ее запуска

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