2010-11-14 39 views
0

J'ai un arbre WPF (lié à des données XML). Un extrait est donné ci-dessous:Détermination ou transmission d'informations de noeud à partir d'un événement de souris dans un arbre WPF

(Pousse bien, je ne peux pas poster une photo parce que ma réputation n'est pas encore assez élevée.) Si mon représentant obtient jusqu'à 10, je l'afficherai. vue arborescente régulière avec quelques icônes plus et moins sur certains éléments de différents niveaux)

Et parce que j'ai besoin d'effectuer des opérations spéciales à certains niveaux, j'ai inséré des icônes à certains niveaux de l'arborescence. Eh bien, en fait, je les ai saisis à tous les niveaux de l'arbre et j'ai juste choisi de les montrer à certains niveaux en utilisant des déclencheurs. Ceci est mon code XAML pour cela:

<HierarchicalDataTemplate ItemsSource="{Binding Path=Elements}" x:Key="ViewEditTreeTemplate"> 
<StackPanel Orientation="Horizontal" Margin="1"> 
    <Label x:Name="ElementHeaderLabel" Height="16" Padding="1" VerticalContentAlignment="Center" FontSize="11" FontWeight="Normal"> 
      <MultiBinding Converter="{StaticResource ElementHeader}"> 
       <Binding Path="Name.LocalName"/> 
       <Binding Path="Attribute[name].Value" /> 
      </MultiBinding> 
    </Label> 

    <Image x:Name="AddButton" Source="Images/button_add_icon.png" Visibility="Collapsed" MouseLeftButtonUp="AddButton_MouseLeftButtonUp" /> 
    <Image x:Name="DeleteButton" Source="Images/button_delete_icon.png" Visibility="Collapsed" MouseLeftButtonUp="DeleteButton_MouseLeftButtonUp" /> 
    <Image x:Name="EditButton" Source="Images/button_edit_icon.png" Visibility="Collapsed" MouseLeftButtonUp="EditButton_MouseLeftButtonUp"/> 
</StackPanel> 

<HierarchicalDataTemplate.Triggers> 


    <!-- Showing aditional buttons for RFFs list --> 
    <DataTrigger Binding="{Binding Path=Name.LocalName}" Value="RFFs"> 
      <Setter TargetName="AddButton" Property="Visibility" Value="Visible"/> 
      <Setter TargetName="DeleteButton" Property="Visibility" Value="Visible"/> 
    </DataTrigger> 

    <!-- Showing aditional buttons for RFF --> 
    <DataTrigger Binding="{Binding Path=Name.LocalName}" Value="RFF"> 
      <Setter TargetName="EditButton" Property="Visibility" Value="Visible"/> 
    </DataTrigger> 

    <!-- Showing aditional buttons for Stations list --> 
    <DataTrigger Binding="{Binding Path=Name.LocalName}" Value="Stations"> 
      <Setter TargetName="AddButton" Property="Visibility" Value="Visible"/> 
      <Setter TargetName="DeleteButton" Property="Visibility" Value="Visible"/> 

    </DataTrigger> 

    <!-- Showing aditional buttons for AdjacentRegionNames list --> 
    <DataTrigger Binding="{Binding Path=Name.LocalName}" Value="AdjacentRegionNames"> 
      <Setter TargetName="AddButton" Property="Visibility" Value="Visible"/> 
      <Setter TargetName="DeleteButton" Property="Visibility" Value="Visible"/> 

    </DataTrigger> 
</HierarchicalDataTemplate.Triggers> 

Mon problème est le suivant. J'ai ajouté un gestionnaire d'événement à ces icônes (AddButton, DeleteButton et EditButton), mais lorsque je suis dans la routine de gestion d'événements, je n'ai aucune idée du nœud sur lequel l'utilisateur était lorsqu'il a cliqué sur le nœud. Puis-je transmettre quelque chose à ce gestionnaire d'événement MouseLeftButtonUp (...) ou y a-t-il un moyen de savoir où se trouvait l'utilisateur lorsqu'il a cliqué sur mon image?

Répondre

0

Le TreeViewItem que l'utilisateur a cliqué est accessible par les args événement:

private void TreeView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
     { 
      TreeViewItem ti = (TreeViewItem)e.Source; 
      //do stuff here 
     } 

Si l'article est pas réellement un « TreeViewItem » vous devriez être en mesure de le jeter à son type afin de travailler avec elle .

+0

L'homme c'est tout. :) Je ne savais pas que les données que je voulais étaient exactes dans l'expéditeur et castable. Dans mon cas, la distribution ressemble à: XElement SelectedElement = (XElement) ((FrameworkElement) expéditeur) .DataContext ;; Mais jamais-le-moins, merci! – Ultratrunks