IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Fermer un TabItem


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Par défaut Fermer un TabItem
    Bonjour,

    J'ai récupérer quelque part (je ne sais plus ou) un code qui me permet d'avoir une petite croix dans chaque tabitem d'un tabcontrol. En cliquant sur la croix, le tabitem se ferme. Jusque là tout fonctionne bien et je ne me suis pas vraiment préoccupé de comprendre à fond le fonctionnement qui me suffisait jusqu'à maintenant.

    Cependant, j'aimerais avoir en plus un tabcontrol à l'intérieur d'un tabitem. mais mon code de fermeture ne fonctionne plus sur les tabitem "enfants".

    TabControl
    TabItem (se ferme normalement)
    TabItem (se ferme normalement)
    TabControl
    TabItem (ne se ferme pas)
    TabItem (ne se ferme pas)

    Ma classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    public class CloseableTab : TabItem, IDisposable
        {
            public static readonly RoutedEvent CloseTabEvent =
                EventManager.RegisterRoutedEvent("CloseTab", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(CloseableTab));
     
            static CloseableTab()
            {
                DefaultStyleKeyProperty.OverrideMetadata(typeof(CloseableTab), new FrameworkPropertyMetadata(typeof(CloseableTab)));
            }
     
            public event RoutedEventHandler CloseTab
            {
                add { AddHandler(CloseTabEvent, value); }
                remove { RemoveHandler(CloseTabEvent, value); }
            }
     
            public override void OnApplyTemplate()
            {
                base.OnApplyTemplate();
     
                Button closeButton = base.GetTemplateChild("PART_Close") as Button;
                if (closeButton != null)
                    closeButton.Click += new System.Windows.RoutedEventHandler(closeButton_Click);
            }
     
            void closeButton_Click(object sender, System.Windows.RoutedEventArgs e)
            {
                this.RaiseEvent(new RoutedEventArgs(CloseTabEvent, this));
            }
     
            public void Dispose()
            {
                throw new NotImplementedException();
            }
        }
    Dans la fenêtre ou je veux utiliser ces tabitem personnalisés, j'ajoute le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public partial class MainWindow : Window
        {
            public MainWindow(String _login, SecureString _password) //CONSTRUCTOR
            {
                InitializeComponent();
                this.AddHandler(CloseableTab.CloseTabEvent, new RoutedEventHandler(this.CloseTab));
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private void CloseTab(object source, RoutedEventArgs args)
            {
                TabItem tabItem = args.Source as TabItem;
                if (tabItem != null)
                {
                    TabControl tabControl = tabItem.Parent as TabControl;
                    if (tabControl != null)
                        tabControl.Items.Remove(tabItem);
                }
            }
    Je passe le code xaml qui ajoute graphiquement la croix.

    En debug, le code passe bien par les bonnes fonction, mais le args.Source ne correspond pas à un CloseableTab dans le cas des tabitem enfants. mais au contrôle parent. (en l'occurence un user control)

    Est-ce que quelqu'un pourrait m'indiquer une éventuelle solution ? (pas facile sur un bout de code à la volée comme ça )
    Merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2011
    Messages : 56
    Par défaut
    J'ai trouvé, à la place de this, fallait mettre le nom du tab control.

    Merci quand même aux lecteur de mon post

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. TabFolder > Comment fermer un TabItem
    Par pouillou dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 18/06/2006, 03h20
  2. [FORM] supprimer l'icone fermer
    Par Evil onE dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/02/2003, 16h25
  3. Fermer l'animation (swf/exe lancé depuis Windows)
    Par ZiZouJH dans le forum Flash
    Réponses: 3
    Dernier message: 14/01/2003, 10h00
  4. [MDI] comment fermer la bonne fenêtre enfant ?
    Par KThrax dans le forum Langage
    Réponses: 5
    Dernier message: 01/09/2002, 09h42
  5. Fermer une application à l'aide de OnIdle
    Par Thierry Rapp dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/08/2002, 12h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo