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 MetroWindow_Loaded(object sender, RoutedEventArgs e) { DataContext = this; // Faire la collection pour le tab TabItem tabItemGenerals = new TabItem { Header = "GENERALS", Name = "Generals" }; ScrollViewer svGenerals = new ScrollViewer { Name = "svGenerals", HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(0, 0, 0, 0), VerticalScrollBarVisibility = ScrollBarVisibility.Auto }; tabItemGenerals.Content = svGenerals; Grid gridGenerals = new Grid { Name = "gridButtonsGenerals" }; svGenerals.Content = gridGenerals; TabItem tabItemHeureH = new TabItem { Header = "HEURE H", Name = "HeureH" }; ScrollViewer svHeureH = new ScrollViewer { Name = "svHeureH", HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(0, 0, 0, 0), VerticalScrollBarVisibility = ScrollBarVisibility.Auto }; tabItemHeureH.Content = svHeureH; Grid gridHeureH = new Grid { Name = "gridButtonsHeureH" }; svHeureH.Content = gridHeureH; TabItems = new List <TabItem>(); TabItems.Add(tabItemGenerals); TabItems.Add(tabItemHeureH); TabItemsCollectionView = new ListCollectionView(TabItems); // Load mods _currentGameName = "HeureH"; ModFactory.Init(this, new List <string> { "Generals", "HeureH" }, new List <string> { _pathToMapsGenerals, _pathToMapsZeroHour }, _pathToExe, _uiScheduler, new List <Grid> { gridGenerals, gridHeureH }, new List <double> { Convert.ToInt32(_currentGameName.Equals("Generals")), Convert.ToInt32(_currentGameName.Equals("HeureH")) }, new List <ComboBox> { comboBoxMapsGenerals, comboBoxMapsHeureH }, new List <CheckBox> { checkBoxGentoolGenerals, checkBoxGentoolHeureH }, new List <CheckBox> { checkBoxForceZoomGenerals, checkBoxForceZoomHeureH }); // Evenements sur changement de tab tabControl.SelectionChanged += tabControl_SelectionChanged; // Sélectionner le bon jeu tabControl.SelectedIndex = 1; // Réappliquer les sélection après update if ((bool)Properties.Settings.Default["JustUpdated"]) { ModFactory.AllGamesRefreshForceZoom(); ModFactory.AllGamesRefreshFullscreenMode(); ModFactory.AllGamesRefreshGentool(); Properties.Settings.Default["JustUpdated"] = false; Properties.Settings.Default.Save(); } // Démarrer l'affichage ModFactory.Refresh(_currentGameName); // Démarrer le détecteur de lancement MonitorGameRunning(); }