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 :

[WPF TreeView] transcrire code xaml en c#


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Par défaut [WPF TreeView] transcrire code xaml en c#
    Bonjour,

    j'aimerai définir une classe c# héritant de la classe "System.Windows.Controls.TreeView" susceptible d'être incorporée dans un formulaire WPF.

    Je souhaiterai dans cette classe utiliser les bibliothèques c# pour reproduire le comportement équivalent au code WPF ci-dessous :

    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            <TreeView  ItemsSource="{Binding ListeTreeview}">
                <TreeView.Resources>
                    <HierarchicalDataTemplate 
                        DataType="{x:Type local:TreeviewDetail}"
                        ItemsSource="{Binding Children}">
                        <TextBlock Text="{Binding Reference}" />
                    </HierarchicalDataTemplate>
     
                    <DataTemplate DataType="{x:Type local:TreeviewDetail2}">
                        <TextBlock Text="{Binding Reference2}" />
                    </DataTemplate>
                </TreeView.Resources>
            </TreeView>

    Mon problème vient du fait que je ne sais pas quelle syntaxe exacte utiliser pour reproduire ce code à l'identique dans ma classe et que je ne trouve sur aucun forum une piste me permettant d'avancer.

    A noter que j'arrive à créer une classe c# héritant de "System.Windows.Controls.TreeView" et utilisant "TreeView.ItemTemplate" en place de "TreeView.Resources" mais ceci ne fonctionne que pour un seul DataType.


    Merci d'avance pour toutes vos contributions

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je sais pas trop pourquoi tu veux le faire en C#, mais je te préviens, c'est un peu du masochisme... XAML est fait pour ce genre de chose, par contre le faire en C# c'est galère.

    Ca donnerait quelque chose comme ça :


    Code C# : 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
        var treeView = new TreeView();
        treeView.SetBinding(TreeView.ItemsSourceProperty, new Binding("ListeTreeview"));
     
        var treeViewDetailTemplate = new HierarchicalDataTemplate();
        treeViewDetailTemplate.DataType = typeof(TreeViewDetail);
        treeViewDetailTemplate.ItemsSource = new Binding("Children");
        var textBlock = new FrameworkElementFactory(typeof(TextBlock));
        textBlock.SetBinding(TextBlock.TextProperty, new Binding("Reference"));
        treeViewDetailTemplate.VisualTree = textBlock;
     
        var treeViewDetail2Template = new DataTemplate();
        treeViewDetail2Template.DataType = typeof(TreeViewDetail2);
        var textBlock2 = new FrameworkElementFactory(typeof(TextBlock));
        textBlock2.SetBinding(TextBlock.TextProperty, new Binding("Reference2"));
        treeViewDetail2Template.VisualTree = textBlock2;
     
        treeView.Resources.Add(treeViewDetailTemplate.DataTemplateKey, treeViewDetailTemplate);
        treeView.Resources.Add(treeViewDetail2Template.DataTemplateKey, treeViewDetail2Template);

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Par défaut
    Merci beaucoup pour la réponse rapide.

    Je viens de procéder aux tests et la solution proposée marche.

    Merci

    PS. cette approche non conventionnelle et "masochiste" me permet de proposer des composants graphiques facilement personnalisables par les utilisateurs (non informaticiens) de mon application. Cette solution m'évite de trop surcharger mes ViewModels (je travaille avec MVVM).

    encore merci.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par francois6 Voir le message
    PS. cette approche non conventionnelle et "masochiste" me permet de proposer des composants graphiques facilement personnalisables par les utilisateurs (non informaticiens) de mon application. Cette solution m'évite de trop surcharger mes ViewModels (je travaille avec MVVM).
    Bah oui mais je vois pas pourquoi tu pourrais pas faire la même chose en XAML...

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 10
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Bah oui mais je vois pas pourquoi tu pourrais pas faire la même chose en XAML...
    Dans un sens, je reconnais que l'utilité profonde de cette approche pour un TreeView est sujette à discussion.

    Je suis cependant forcé à suivre une démarche similaire pour la mise en oeuvre des composants DataGrid dont les options de personnalisation utilisateur sont trop nombreuses pour permettre une approche conventionnelle du problème.

    Par souci de similitude, je me dois de proposer à mes utilisateurs une solution équivalente pour les TreeView.


    Merci encore pour ta contribution

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

Discussions similaires

  1. [WPF] TreeView & SelectedItem
    Par UNi[FR] dans le forum Windows Presentation Foundation
    Réponses: 15
    Dernier message: 18/02/2008, 10h16
  2. [WPF] TreeView et contextMenu
    Par binoo dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 09/11/2007, 15h29
  3. [WPF] Accés à un élément XAML depuis C#
    Par UNi[FR] dans le forum C#
    Réponses: 6
    Dernier message: 07/09/2007, 15h07
  4. [WPF] - que devient le Xaml après compilation
    Par DonJR dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 10/05/2007, 14h27
  5. Transcrire code PHP dans une DLL
    Par LEK dans le forum C++
    Réponses: 16
    Dernier message: 26/09/2005, 14h17

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