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 :

TreeView et clique-droit


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut TreeView et clique-droit
    Bonjour,
    Je debute en programmation, et je suis sur un petit projet VB 2008 avec WPF
    J'ai une treeview, et je voudrais que lors d'un clique droit sur un item de la treeview, cet item soit séléctionné.

    Actuellement, j'arrive a connaitre la position de la souris par rapport a la treeview:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TreeView_General_MouseRightButtonUp(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles TreeView_General.MouseRightButtonUp
            Dim testPt As Point = New Point
            testPt.X = e.MouseDevice.GetPosition(TreeView_General).X
            testPt.Y = e.MouseDevice.GetPosition(TreeView_General).Y
            MsgBox(testPt.ToString())
     
     
        End Sub
    Mon problème est le suivant:
    Je n'arrive pas a trouver comment determiner l'item qui se trouve à une position donnée (en tous cas, pas en WPF, getnodeat ne semble plus exister)...
    Est-ce que quelqu'un à déjà été confronté au problème ouo aurait un début de solution?

    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Salut,

    Tu débute en Wpf aussi je ne sais pas si tu a déjà joué avec les styles des contrôles... Toujours est-il que tu peux y parvenir assez simplement en définissant dans le style du TreeViewItem l'évènement clic droit de la manière suivante :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <Style TargetType="TreeViewItem" x:Key="{x:Type TreeViewItem}" >
          <EventSetter Event="MouseRightButtonDown" Handler="TreeViewItem_MouseRightButtonDown" />
     
          ... reste du style ...
     
        </Style>

    et dans le code behind (en c#) :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        private void TreeViewItem_MouseRightButtonDown( object sender, MouseButtonEventArgs e ) {
          ( (TreeViewItem)sender ).IsSelected = true;
          e.Handled = true;
        }

    Si tu as des questions sur les styles n'hésite pas

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    Salut,
    non, j'ai jamais joué avec ces choses là....
    Donc, si j'ai bien compris, c'est dans la partie xaml qu'il faut mettre le code du style. Actuellement j'ai çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TreeView Height="251" HorizontalAlignment="Left" Margin="0,1,0,0" Name="TreeView_General" VerticalAlignment="Top" Width="207" SelectedItemChanged="TreeView1_SelectedItemChanged">
                <TreeViewItem Header="test item">
     
                </TreeViewItem>
            </TreeView>
    que j'ai transformé en çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <TreeView Height="251" HorizontalAlignment="Left" Margin="0,1,0,0" Name="TreeView_General" VerticalAlignment="Top" Width="207" SelectedItemChanged="TreeView1_SelectedItemChanged">
                <Style TargetType="TreeViewItem" x:Key="{x:Type TreeViewItem}" >
                    <EventSetter Event="MouseRightButtonDown" Handler="TreeViewItem_MouseRightButtonDown" />
     
                </Style>
                <TreeViewItem Header="test item">
     
                </TreeViewItem>
            </TreeView>

    Et à ce moment là, j'ai le droit a l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	1	L'attribut de clé ne peut être utilisé que dans une balise contenue dans une propriété de type IDictionary.
    En fait, je suppose que le style ne devrait pas être mis à cet endroit, mais je ne vois pas où le mettre....

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Oui il va falloir lire un petit peu sur WPF (on passe tous par là ).

    Pour t'aiguiller, les styles avec une clé (x:Key) peuvent se mettre dans les ressources de la manière suivante par exemple :
    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
    <Window 
      ...
      >
     
      <Window.Resources>
     
        <Style TargetType="TreeViewItem" x:Key="{x:Type TreeViewItem}" >
          <EventSetter Event="MouseRightButtonDown" Handler="TreeViewItem_MouseRightButtonDown" />
     
          ... reste du style ...
     
        </Style>
     
      </Window.Resources>
     
      <!-- Après les ressources tu places tes contrôles -->
      <TreeView ... />
     
    </Window>

    ps : Ce n'est pas la seule façon, on peut aussi les définir dans un dictionnaire de ressource placé ailleurs que dans la window. Je te laisse te renseigner

    Par défaut tout les treeView verront leur items avec ce style. Si tu ne veux pas que ce soit ainsi, il faut alors changer la clé (mettre un nom de ton souhait comme x:Key="MonTreeViewItemStyle" pour faire original) et l'appeler depuis ton TreeView de la manière suivante :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <TreeView ... ItemContainerStyle="MonTreeViewItemStyle" />

    A la place de "... reste du style ..." tu peux par exemple récupérer le style par défaut d'un TreeViewItem (via Blend par exemple si tu l'as). Je l'ai fait pour toi, c'est ce qu'il faut mettre :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
      		<Setter Property="Background" Value="Transparent"/>
      		<Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
      		<Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
      		<Setter Property="Padding" Value="1,0,0,0"/>
      		<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
      		<Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}"/>
      		<Setter Property="Template">
      			<Setter.Value>
      				<ControlTemplate TargetType="{x:Type TreeViewItem}">
      					<Grid>
      						<Grid.ColumnDefinitions>
      							<ColumnDefinition MinWidth="19" Width="Auto"/>
      							<ColumnDefinition Width="Auto"/>
      							<ColumnDefinition Width="*"/>
      						</Grid.ColumnDefinitions>
      						<Grid.RowDefinitions>
      							<RowDefinition Height="Auto"/>
      							<RowDefinition/>
      						</Grid.RowDefinitions>
      						<ToggleButton x:Name="Expander" Style="{StaticResource ExpandCollapseToggleStyle}" ClickMode="Press" IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"/>
      						<Border SnapsToDevicePixels="true" x:Name="Bd" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" Grid.Column="1">
      							<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" x:Name="PART_Header" ContentSource="Header"/>
      						</Border>
      						<ItemsPresenter x:Name="ItemsHost" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1"/>
      					</Grid>
      					<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>
      						<Trigger Property="IsSelected" Value="true">
      							<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
      							<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
      						</Trigger>
      						<MultiTrigger>
      							<MultiTrigger.Conditions>
      								<Condition Property="IsSelected" Value="true"/>
      								<Condition Property="IsSelectionActive" Value="false"/>
      							</MultiTrigger.Conditions>
      							<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
      							<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
      						</MultiTrigger>
      						<Trigger Property="IsEnabled" Value="false">
      							<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
      						</Trigger>
      					</ControlTemplate.Triggers>
      				</ControlTemplate>
      			</Setter.Value>
      		</Setter>

    Tu peux t'en servir de base pour le modifier et obtenir un style plus à toi (couleur de sélection différente, etc.)


    Il y a également un moyen de définir le style à même le TreeView comme tu tentais de le faire. Ceci à quelque nuance près...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Par défaut
    Un trés grans merci à toi
    çà fonctionne!!! Je vais tenté de me pencher de plus prés sur le XAML

    Dans le XAML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <Style TargetType="TreeViewItem" x:Key="{x:Type TreeViewItem}" >
                <EventSetter Event="MouseRightButtonDown" Handler="TreeView_General_MouseRightButtonDown" />
     
            </Style>
    Dans le VB:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TreeView_General_MouseRightButtonDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) Handles TreeView_General.MouseRightButtonDown
            sender.IsSelected = True
            e.Handled = True
        End Sub
    PS: Si tu as des bon tutoriaux sous WPF, je suis preneur

    ++

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Sur ce site même, tu as de bons tutoriels pour commencer :
    http://dotnet.developpez.com/cours/?page=csharp#wpfcs

    Après WPF commence à se trouver de plus en plus sur la toile (c'est comme ça que j'ai appris, au fil des pages visitées ...). Tu peux également trouver de bon livres sur WPF...

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

Discussions similaires

  1. TreeView : Clique droit
    Par LoicH dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/09/2005, 20h40
  2. Clique droit dans une ListBox
    Par LoicH dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/02/2005, 22h50
  3. [SWISH] Clique droit
    Par Phoenix0007 dans le forum EDI/Outils
    Réponses: 6
    Dernier message: 03/02/2005, 21h58
  4. [VB6] menu contextuel sur clique droit souris
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 08/07/2003, 11h07

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