2010-12-27 20 views
1

Hallo alles, ich versuche ContexMenu in meine dynamisch generierte Struktur hinzuzufügen.WPF: Hinzufügen von ContexMenu zu dynamisch erstellten Baum

Unten ist mein Code zum Generieren von Tree.

brauche ich ContexMenu für hinzuzufügen:

NEU: EDIT:

auf Mouse DELETE sollte ich in der Lage sein, die gleiche Operation auszuführen des jeweiligen Buttons klicken.

Kann jeder Körper helfen, den Code zu vervollständigen.

XML: CODE

<Window x:Class="NewTree_DynamicNode.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     Loaded="TestsTreeViewPageFunction_Loaded"> 
    <Grid> 
     <TreeView Name="treeFileSystem" > 
      <TreeViewItem Header="Suite" Name="MYTree" Tag="hi" IsExpanded="True"> 
       <TreeViewItem Name="treeFileSystem1" />        
      </TreeViewItem> 
     </TreeView> 
     <TextBox Name="textBox1" Height="23" HorizontalAlignment="Left" Margin="121,150,0,0" VerticalAlignment="Top" Width="120" /> 
     <Button Content="New" Height="23" HorizontalAlignment="Left" Margin="12,121,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="New_Click" /> 
     <Button Content="Edit" Height="23" HorizontalAlignment="Left" Margin="12,150,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="Edit_Click"/> 
     <Button Content="Copy" Height="23" HorizontalAlignment="Left" Margin="12,179,0,0" Name="button3" VerticalAlignment="Top" Width="75" Click="Copy_Click"/> 
    </Grid> 
</Window> 

C# -Code:

private void TestsTreeViewPageFunction_Loaded(object sender, 
RoutedEventArgs e) 
     { 

      this.MYTree.Items.Clear(); 

      for (int j = 1; j < 4; j++) 
      { 
       TreeViewItem Case = new TreeViewItem(); 
       Case.Header = "Case "+j.ToString(); 
       Case.IsExpanded = true; 

       Case.Items.Add(Trythis()); 

       this.MYTree.Items.Add(Case); 
      } 

     } 


     private TreeViewItem Trythis() 
     { 
      TreeViewItem Step = new TreeViewItem(); 

      for (int i = 0; i < 5; i++) 
      { 
      Step.Header = "Steps " + i.ToString(); 
      } 
      return Step;   
     } 



     private void New_Click(object sender, RoutedEventArgs e) 
     { 
      textBox1.Text = "New Button Clicked"; 
     } 

     private void Edit_Click(object sender, RoutedEventArgs e) 
     { 
      textBox1.Text = "Edit Button Clicked"; 
     } 

     private void Copy_Click(object sender, RoutedEventArgs e) 
     { 
      textBox1.Text = "Copy Button Clicked"; 
     } 

EDIT:

Ich suche nach einer Lösung, wo ich in der Lage sein sollte, hinzufügen oder Beschränke das ContexMenu auf TreeItem basierend auf dem Header in Formation.

+0

Ihr Code ist wirklich unordentlich. Verwenden Sie keine 'button1' Namen. –

Antwort

3

Sie Stil verwenden können gemeinsame ContextMenu Eigenschaft festlegen:

<TreeViewItem Header="Suite" Name="MYTree" Tag="hi" IsExpanded="True"> 
    <TreeViewItem.Resources> 
     <Style TargetType="{x:Type TreeViewItem}"> 
      <Setter Property="ContextMenu"> 
       <Setter.Value> 
        <ContextMenu> 
         <MenuItem Header="New" /> 
         <MenuItem Header="Edit" /> 
         <MenuItem Header="Delete" /> 
        </ContextMenu> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </TreeViewItem.Resources> 
    <TreeViewItem x:Name="treeFileSystem1" /> 
</TreeViewItem> 

Oder Sie können Kontextmenü im Code hinzufügen: vor Zeile this.MYTree.Items.Add(Case); Sie so etwas wie dies hinzufügen:

var menu = new ContextMenu(); 
menu.Children.Add(new MenuItem{Header = "Save"}); 
menu.Children.Add(new MenuItem{Header = "Load"}); 
Case.ContextMenu = menu; 
+0

Vielen Dank für die Antwort ....... Gibt es eine Lösung, die das ContexMenu zur Laufzeit hinzufügen wird. Also, basierend auf einigen Berechnungen, sagen wir basierend auf Tree Header kann ich entscheiden, welche ContedMenu zu verwenden – vrbilgi

+0

@ user430294 Aktualisierte Antwort –

+0

Danke für die Lösung. – vrbilgi

Verwandte Themen