2009-03-25 10 views
0

Je suis débutant dans WPF, donc désolé de question stupide.WPF: Combobox dans TreeviewItem

Il est possible d'afficher la zone de liste déroulante côte à côte avec TreeViewItem sélectionné?

je besoin de quelque chose comme le montre la photo à gauche au lien suivant: http://www.mypicx.com/03242009/Combobox_in_TreeviewItem/

J'ai essayé de le faire ainsi:

<TreeView Name="treeView1">
<TreeViewItem Header="aaa">
<ComboBox Height="19">
<ComboBoxItem Content="111" IsSelected="True"></ComboBoxItem>
<ComboBoxItem>222</ComboBoxItem>
<ComboBoxItem Content="333"></ComboBoxItem>
</ComboBox>
<TreeViewItem Header="aaa1">
</TreeViewItem>
<TreeViewItem Header="aaa2">
</TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="bbb">
<TreeViewItem Header="bbb1" />
<TreeViewItem Header="bbb2" />
</TreeViewItem>
<TreeViewItem Header="ccc" />
</TreeView>

et le résultat que vous pouvez voir dans la photo de droite.

En attendant, j'ai besoin de savoir, comment faire cela visuellement. Plus tard, j'ai besoin de faire quelque chose avec l'événement SelectedItemChanged.

Merci d'avance!

P.S. désolé mon anglais

Répondre

3

Ce que vous devez faire est de mettre votre zone de liste déroulante dans votre tête comme tels

<TreeView Name="treeView1"> 
    <TreeViewItem> 
     <TreViewItem.Header> 
      <StackPanel Orientation="Horizontal"> 
       <ComboBox Height="19"> 
        <ComboBoxItem Content="111" IsSelected="True"></ComboBoxItem> 
        <ComboBoxItem>222</ComboBoxItem> 
        <ComboBoxItem Content="333"></ComboBoxItem> 
       </ComboBox> 
      </StackPanel> 
     </TreViewItem.Header> 
     <TreeViewItem Header="aaa1"> 
     </TreeViewItem> 
     <TreeViewItem Header="aaa2"> 
     </TreeViewItem> 
    </TreeViewItem> 
    <TreeViewItem Header="bbb"> 
     <TreeViewItem Header="bbb1" /> 
     <TreeViewItem Header="bbb2" /> 
    </TreeViewItem> 
    <TreeViewItem Header="ccc" /> 
</TreeView> 
0

Merci beaucoup pour les réponses. Déjà quelques jours donc j'essaye de faire que la combobox apparaîtra seulement à côté du nœud sélectionné. J'ai lié l'arborescence au simple fichier de données XML et essayé d'afficher la liste déroulante à travers les styles. Voici mes données XML:


< xml version = "1.0" encoding = "utf-8"? >
< racine Name = "Root" >
< Nom Node = "AAA" >
< childNode Name = "aaa 1"/>
< childNode Name = "aaa 2"/>
< Nom childNode = "aaa 3"/>
</Noeud >
< Nom du noeud = "BBB" >
< childNode Name = "bbb 1"/>
< childNode Name = "bbb 2"/>
</Noeud >
</Root >


Et voici ma faible tentative:

<HierarchicalDataTemplate DataType="Node" ItemsSource="{Binding XPath=*}" x:Key="normal"> 
     <TextBlock Text="{Binding [email protected]}"/> 
    </HierarchicalDataTemplate> 
    <HierarchicalDataTemplate DataType="Node" ItemsSource="{Binding XPath=*}" x:Key="selected"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding [email protected]}"/> 
      <ComboBox> 
       <ComboBoxItem IsSelected="True">111</ComboBoxItem> 
       <ComboBoxItem>222</ComboBoxItem> 
       <ComboBoxItem>333</ComboBoxItem> 
      </ComboBox> 
     </StackPanel> 
    </HierarchicalDataTemplate> 

    <DataTemplate x:Key="normal1" DataType="ChildNode"> 
     <TextBlock Text="{Binding [email protected]}"/> 
    </DataTemplate> 
    <DataTemplate x:Key="selected1" DataType="ChildNode"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding [email protected]}"/> 
      <ComboBox> 
       <ComboBoxItem IsSelected="True">111</ComboBoxItem> 
       <ComboBoxItem>222</ComboBoxItem> 
       <ComboBoxItem>333</ComboBoxItem> 
      </ComboBox> 
     </StackPanel> 
    </DataTemplate> 

    <Style TargetType="{x:Type TreeViewItem}" x:Key="ContainerStyle"> 
     <Setter Property="HeaderTemplate" Value="{StaticResource normal}" /> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="True"> 
       <Setter Property="HeaderTemplate" Value="{StaticResource selected}" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

    <XmlDataProvider x:Key="XmlNodeList" Source="XMLFile1.xml"/> 

</Window.Resources> 

<Grid> 
    <TreeView ItemContainerStyle="{StaticResource ContainerStyle}"> 
     <TreeViewItem Header="{Binding Source={StaticResource XmlNodeList}, XPath=/Root/@Name}" 
         ItemsSource="{Binding Source={StaticResource XmlNodeList}, XPath=/Root/Node}" /> 
    </TreeView> 
</Grid> 

Cette compilation passe le code, mais lance une exception lors de l'exécution: L'élément a déjà été ajouté. Clé dans le dictionnaire: 'DataTemplateKey (Node)' Clé ajoutée: 'DataTemplateKey (Noeud)'

Je suis compris, que mon chemin est faux, mais quelle est la solution?