private void Items_CurrentChanging(object sender, System.ComponentModel.CurrentChangingEventArgs e) { // Annuler l'événement si nécessaire if (!this.IsLoaded || tabControl.SelectedIndex < 0 || _tabState == TabStateEnum.Change1) { if (e.IsCancelable) { e.Cancel = true; } return; } // 2ème étape du changement if (_tabState == TabStateEnum.Change2) { _tabState = TabStateEnum.Normal; return; } // Se souvenir de l'onglet sélectionner et annuler l'action (elle sera refaite manuellement après animation) int previousIndex = tabControl.SelectedIndex; if (e.IsCancelable) { e.Cancel = true; } // Démarrer l'animation de sortie ModFactory.ChangeTabAnimation(_currentGameName, 0); // Mettre à jour le statut _tabState = TabStateEnum.Change1; // Attendre la fin de l'animation Task.Factory.StartNew(() => { Thread.Sleep(Convert.ToInt32(CHANGE_TAB_ANIMATION_DURATION_IN_SECONDS * 1000)); }).ContinueWith(antecedent => { // Stuff pour que l'animation fonctionne tabControl.SelectedIndex = -1; _tabState = TabStateEnum.Change2; tabControl.SelectedIndex = previousIndex; // Prendre note du changement de jeu _currentGameName = ((TabItem)tabControl.Items.GetItemAt(tabControl.SelectedIndex)).Name; // Afficher et lancer l'animation ModFactory.Refresh(_currentGameName, true); ModFactory.ChangeTabAnimation(_currentGameName, 1); }, _uiScheduler); }
private void tabControl_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!(e.Source is TabControl)) { return; } if (!this.IsLoaded) { return; } if (_tabState != TabStateEnum.First) { return; } // Evenements sur changement de tab tabControl.IsSynchronizedWithCurrentItem = true; tabControl.Items.CurrentChanging += Items_CurrentChanging; _tabState = TabStateEnum.Normal; }