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;
        }