Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: WPF завершение анимации Добавлено: 05.08.10 22:47  

Автор вопроса:  Skywalker | Web-сайт: iSkywalker.ru | ICQ: 300-70-6пятьЪ 
есть у меня меню, когда нажимаешь кнопочку в нем, то старое съезжает влево, а новое приезжает справа.


private void slideRightToLeftMenu(UIElement left, UIElement right)
        {
            right.SetValue(MarginProperty, new Thickness(innerGrid.ActualWidth, 0, 0, 0));
            if (!topMenuGrid.Children.Contains(right))
                topMenuGrid.Children.Add(right);
            right.Visibility = Visibility.Visible;
            Storyboard storyBoard = new Storyboard();
            ThicknessAnimation anim1 = new ThicknessAnimation(new Thickness(-topMenuButt.ActualWidth - 201, 0, 0, 0), new Duration(TimeSpan.FromMilliseconds(300)));
            Storyboard.SetTargetProperty(anim1, new PropertyPath("Margin"));
            Storyboard.SetTarget(anim1, left);
            ThicknessAnimation anim2 = new ThicknessAnimation(new Thickness(0), new Duration(TimeSpan.FromMilliseconds(300)));
            Storyboard.SetTargetProperty(anim2, new PropertyPath("Margin"));
            Storyboard.SetTarget(anim2, right);
            storyBoard.Children.Add(anim1);
            storyBoard.Children.Add(anim2);
            storyBoard.Completed += new EventHandler(slideLeftRemoveMenu_Completed);
            storyBoard.Begin();
        }

        private void slideLeftRemoveMenu_Completed(object sender, EventArgs e)
        {
            UIElement el = (UIElement)Storyboard.GetTarget((sender as ClockGroup).Children[0].Timeline);
            if (topMenuGrid.Children.Contains(el))
                topMenuGrid.Children.Remove(el);
            RaiseEvent(new RoutedEventArgs(frmMain.EndMenuAnimationEvent));
        }


ну и юзается так:

private void btnLoadMyAlbums_Click(object sender, RoutedEventArgs e)
        {
            slideRightToLeftMenu(mainMenu, albumMenu);
            slideToLeftElements(albumsListView);
            this.EndMenuAnimation += new RoutedEventHandler(frmMain_EndMenuAnimationEvent_loadAlbums);    
            viewState = ViewState.Albums;
        }

private void frmMain_EndMenuAnimationEvent_loadAlbums(object sender, RoutedEventArgs e)
        {
            this.EndMenuAnimation -= new RoutedEventHandler(frmMain_EndMenuAnimationEvent_loadAlbums);
            albums = dataAlbumService.getAllAlbums();
            albumsListView.ItemsSource = albums;
            albums.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(albums_CollectionChanged);
        }



теперь собственно вопросы:
после завершения анимации необходимо проделать некие действия, поэтому я привязываюсь к событию завершения анимации storyBoard.Completed и потом raise'ю свое событие EndMenuAnimationEvent, которое отлавливаю и после этого делаю эти действия.
1. я сам вижу, что это как-то через жопу, как это делается нормально? может паттерн программирования какой или что
2. действия начинают делаться то еще до завершения анимации, то как полагается после, т.е. иногда кнопки еще не до конца уезжают, анимация еще не до конца завершилась, а уже анимация зависает, потому что начинают делаться эти действия, потом оживает и уже уезжают до конца. почему так происходит не совсем ясно

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #1
Добавлено: 05.08.10 23:09
Если не совсем понятно, вот длинный скрин http://a.imageshack.us/img168/32/screenqc.png на среднем кадре как раз "зависание" анимации, т.к. происходит загрузка списка друзей из инета, хотя вроде как она должна производится только после окончания анимации. средний скрин даже скриншотиться не захотел, пришлось в фотошопе воспроизводить

Ответить

Номер ответа: 2
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #2
Добавлено: 07.08.10 21:29
лан, при использовании многопоточности все норм, не знаю чо я ее раньше не заюзал

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам