2010-12-27 25 views
1

こんにちはすべて私は動的に生成されたツリーにContexMenuを追加しようとしています。WPF:動的に作成されたツリーにContexMenuを追加する

以下は、ツリーを生成するための私のコードです。

私はのためにContexMenuを追加する必要があります。

NEW: EDIT: 私は各ボタンをクリックするのと同じ操作を行うことができるはずMouseClickと上

を削除します。

コードを完成させるのに役立つボディがあります。

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#コード:

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:

私は追加したりすることができるはずソリューションを探していますそこに基づいてContextMenuをTreeItemに制限する形成。

+0

:ラインthis.MYTree.Items.Add(Case); 前に、このような何かを追加することができます本当に乱雑です。 'button1'名は使わないでください。 –

答えて

3

あなたは、共通のContextMenuプロパティを設定するために、スタイルを使用することができます。

<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> 

それとも、コード内でコンテキストメニューを追加することができます:あなたのコードがある

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

お返事ありがとうございます.......実行時にContexMenuを追加するソリューションはありますか?だからいくつかの計算に基づいて、私はどのContedMenuを使用するかを決定することができますツリーヘッダーに基づいて言うことを考えてみましょう – vrbilgi

+0

@ user430294更新された答え –

+0

ソリューションありがとう。 – vrbilgi

関連する問題