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 :

Ajout de TreeviewItem par code et Template


Sujet :

Windows Presentation Foundation

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Ajout de TreeviewItem par code et Template
    Bonjour,

    je travaille en WPF C# avec le framework 4.0.
    J'ai souci sur l'utilisation des Treeview avec un style qui définit un template.
    Les noeuds créés dynamiquement ne s'affichent que si le style n'est pas utilisé et je ne vois pas trop pourquoi.

    Voici le style défini en xaml :
    désolé pour l’indentation par top ...
    Code xaml : 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
    <Style x:Key="TreeNodeStyle" TargetType="{x:Type TreeViewItem}">
                <Setter Property="Template">
                    <Setter.Value>                    
                        <ControlTemplate TargetType="{x:Type TreeViewItem}">                        
                            <StackPanel Orientation="Horizontal">
                                <Image Width="24" Source="{TemplateBinding Tag, Converter={StaticResource ImageNodeDebugInfos}}" />
                                <TextBlock x:Name="Start" Margin="3,0,0,0" FontWeight="Bold"
                                           VerticalAlignment="Center"
                                           Text="{TemplateBinding Header, Converter={StaticResource RetTreeNodeTextStartpart}, ConverterParameter=:}" />
                                <TextBlock x:Name="End" Margin="3,0,0,0"
                                           VerticalAlignment="Center"
                                           Text="{TemplateBinding Header, Converter={StaticResource RetTreeNodeTextTrailpart}, ConverterParameter=:}" Foreground="Blue" TextWrapping="WrapWithOverflow" />                            
                            </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
    et voici la méthode qui crée le noeud et l'affecte à son parent :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void AddTreeViewItem(TreeViewItem Parent, String Str, bool ApplyStyle = true, Object T = null)
    {
                TreeViewItem I;
                I = new TreeViewItem() { Header = Str, Tag = T ,Style = ApplyStyle ? (Style)Resources["TreeNodeStyle"] : null };
                Parent.Items.Add(I);
    }
    S'il manque des éléments, dites-le moi.

    Merci par avance de vos réponses.

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Tu es sur que les converters marchent bien? Si tu essayes sans?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    merci de ta réponse.
    En fait, oui les converters marchent....
    Si je n'affecte pas le style aux seuls noeuds qui ont des enfants l'arborescence est correcte (et la mise en forme est OK, sauf pour les neouds sans style bien entendu)
    Voici l'affichage dans ce cas :



    On voit que les noeuds "Groupe: Test Entrant..." et "Groupes : ..." n'ont pas de mise en forme (gras et bleu) comme les autres.

    Pour info, les converters servent à permettre l'affichage en gras et en bleu

    Si je remets le style, l'arborescence ne s'affiche plus (uniquement les noeuds de niveau 1)



    Voilà. J'espère que cela va te permettre de mieux comprendre ma problématique.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Points : 6
    Points
    6
    Par défaut

    A force de recherches et tests (et grâce à Blend ! ) j'ai trouvé comment faire ce que je veux !
    En fait (et pour faire simple) il manquait une balise itempresenter et de quoi gérer les togglebuttons avec des triggers

    La forme triangulaire du toggle button :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
     <PathGeometry x:Key="TreeArrow" Figures="M0,0 L0,6 L6,0 z"/>

    Le style avec template pour les togglebuttons:
    Code xml : 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
            <Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
                <Setter Property="Focusable" Value="False"/>
                <Setter Property="Width" Value="16"/>
                <Setter Property="Height" Value="16"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ToggleButton}">
                            <Border Background="Transparent" Height="16" Padding="5,5,5,5" Width="16">
                                <Path x:Name="ExpandPath" Data="{StaticResource TreeArrow}" Fill="Transparent" Stroke="#FF989898">
                                    <Path.RenderTransform>
                                        <RotateTransform Angle="135" CenterY="3" CenterX="3"/>
                                    </Path.RenderTransform>
                                </Path>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF1BBBFA"/>
                                    <Setter Property="Fill" TargetName="ExpandPath" Value="Transparent"/>
                                </Trigger>
                                <Trigger Property="IsChecked" Value="True">
                                    <Setter Property="RenderTransform" TargetName="ExpandPath">
                                        <Setter.Value>
                                            <RotateTransform Angle="180" CenterY="3" CenterX="3"/>
                                        </Setter.Value>
                                    </Setter>
                                    <Setter Property="Fill" TargetName="ExpandPath" Value="#FF595959"/>
                                    <Setter Property="Stroke" TargetName="ExpandPath" Value="#FF262626"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>


    Le style du TreeviewItem :
    Code xml : 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
    <Style x:Key="TreeNodeStyle" TargetType="{x:Type TreeViewItem}">
                <Setter Property="Template">
                    <Setter.Value>                    
                        <ControlTemplate TargetType="{x:Type TreeViewItem}">
                            <StackPanel Orientation="Vertical">
                            <StackPanel Orientation="Horizontal">
                                <ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
                                <!--Image Width="24" Source="{TemplateBinding Tag, Converter={StaticResource ImageNodeDebugInfos}}" /-->
                                <TextBlock x:Name="Start" Margin="3,0,0,0" FontWeight="Bold"
                                           VerticalAlignment="Center"
                                           Text="{TemplateBinding Header, Converter={StaticResource RetTreeNodeTextStartpart}, ConverterParameter=:}" />
                                <TextBlock x:Name="End" Margin="3,0,0,0"
                                           VerticalAlignment="Center"
                                           Text="{TemplateBinding Header, Converter={StaticResource RetTreeNodeTextTrailpart}, ConverterParameter=:}" Foreground="Blue" TextWrapping="WrapWithOverflow" />
     
                            </StackPanel>
                            <ItemsPresenter x:Name="ItemsHost" Margin="20,0,0,0"/>
                            </StackPanel>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsExpanded" Value="false">
                                    <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
                                </Trigger>
                                <Trigger Property="HasItems" Value="false">
                                    <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>                    
                    </Setter.Value>
                </Setter>
            </Style>

    En espérant que cela aidera les prochains qui seront confrontés à ce problème

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

Discussions similaires

  1. [WD-2000] AJouter un IF{} par code ?
    Par marot_r dans le forum VBA Word
    Réponses: 9
    Dernier message: 08/12/2010, 21h31
  2. ajouter une colonne par code SQL
    Par zalalus dans le forum Développement
    Réponses: 5
    Dernier message: 16/07/2010, 17h32
  3. Ajouter des éléments par Code c# sans être autorisé
    Par hassine dans le forum SharePoint
    Réponses: 17
    Dernier message: 12/08/2009, 13h03
  4. Ajouter une ressource par code
    Par SyLvErStOrM dans le forum C#
    Réponses: 8
    Dernier message: 13/03/2008, 10h48
  5. [VB 2005][DatagridView] Ajouter une ligne par code
    Par RaelRiaK dans le forum VB.NET
    Réponses: 3
    Dernier message: 23/01/2007, 22h54

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