2010-12-30 4 views
2

TreeviewItem을 삭제하려고하는데 선택에서 할 수 있습니다. 선택시 동일한 작업을 수행하고 싶습니다. ContextMenu. 다음은 트리 및 컨텍스트 메뉴의 생성을위한 코드입니다. 해결 방법을 제안하십시오.WPF : ContextMenu에서 TreeViewItem을 삭제합니다.

XAML :

<TreeView Name="treeFileSystem" TreeViewItem.Selected="TreeViewItemSelected" > 
    <TreeViewItem Header="Suite" Name="MYTree" Tag="hi" IsExpanded="True"> 
       <TreeViewItem Name="treeFileSystem1" />      
    </TreeViewItem> 
</TreeView> 

CODE : 나는 내 문제를 해결하는 방법을 발견했다

private void TestsTreeViewPageFunction_Loaded(object sender,RoutedEventArgs e) 
     { 
      this.MYTree.Items.Clear(); 
      this.MYTree.ContextMenu = AddContexMenu("Suite"); 
      for (int j = 1; j < 5; j++) 
      { TreeViewItem Case = new TreeViewItem(); 
       Case.ContextMenu = AddContexMenu("Case"); 
       Case.Header = "Case "+j.ToString(); 
       Case.IsExpanded = true; 
       this.MYTree.Items.Add(Case); 
      } 
     } 

    private ContextMenu AddContexMenu(string var) 
     {    
      ContextMenu menu = new ContextMenu(); 
      MenuItem obj1 = new MenuItem(); 
      obj1.Click += delegate(System.Object o, RoutedEventArgs e) 
      { 
        **?????????????**   
      }; 
      obj1.Header = "Delete " + var; 
      menu.Items.Add(obj1); 
      return menu; 
     } 

     private void TreeViewItemSelected(object sender, RoutedEventArgs e) 
     { 
      TreeViewItem TreeItem = (TreeViewItem)e.OriginalSource; 
      TreeViewItem Parent = (TreeViewItem)TreeItem.Parent; 
      Parent.Items.Remove(TreeItem); 
     } 

답변

1

.

다음은 해결책입니다.

obj1.Click += delegate(System.Object o, RoutedEventArgs e) 

    { 

     MenuItem menuObject = (MenuItem)o; 

TreeViewItem menutreeItem =((ContextMenu)menuObject.Parent).PlacementTarget as 

TreeViewItem; 

//To get the Tree from which the context menu is called 

TreeViewItem Parent = (TreeViewItem)menutreeItem.Parent; 

//To get the parent of the TreeViewItem 

Parent.Items.Remove(menutreeItem); 

//Removing the TreeItem from Parent 


}; 
관련 문제