2013-07-03 29 views
0

我有一個小問題,指定的ContextMenu特定樹型視圖:TreeViewItems和文本菜單

<TreeView x:Name="_filesTree"> 
    <TreeView.Resources> 
     <ContextMenu x:Key="_rootContextMenu"> 
      <MenuItem Header="Add..." Click="MenuItem_Click" /> 
     </ContextMenu> 
    </TreeView.Resources> 
    <TreeViewItem Header="Persistent" ContextMenu="{DynamicResource _rootContextMenu}"/> 
    <TreeViewItem Header="Temporary" ContextMenu="{DynamicResource _rootContextMenu}" /> 
</TreeView> 

Click處理程序:

 private void MenuItem_Click(object sender, RoutedEventArgs e) 
    { 
     Point menuClickPoint = ((sender as FrameworkElement).Parent as ContextMenu).TranslatePoint(new Point(0, 0), _filesTree); 
     DependencyObject obj = _filesTree.InputHitTest(menuClickPoint) as DependencyObject; 

     while (obj != null && !(obj is TreeViewItem)) 
     { 
      obj = VisualTreeHelper.GetParent(obj); 
     } 

     (obj as TreeViewItem).Items.Add("(new)"); 
    } 

在我* MenuItem_Click *事件處理程序,我加入新的TreeViewItems被點擊的項目,什麼工作正常。但是在添加新的(例如「Persistent」子樹)後,右鍵單擊這個新子項再次打開上下文菜單。這是我不需要的東西,因爲我需要這些新添加的項目的另一個上下文菜單(使用刪除選項)。 如何創建上下文菜單僅在右鍵單擊根項目(TextBlock)時打開,而不在子樹內打開?

謝謝

+0

發佈MenuItem_Click代碼 – makc

+0

問題編輯... –

+0

它看起來像所有的項目將具有相同的ContextMenu。我建議使用HierarchicalDataTemplate來更改哪些項目使用哪些上下文菜單。 – Kcvin

回答

0

我明確定義新的上下文菜單的每個子項:

 TreeViewItem tvi = new TreeViewItem(); 
     tvi.ContextMenu =(ContextMenu) this._filesTree.Resources["_subItemContextMenu"]; 
     tvi.Header = "(new)"; 

     (obj as TreeViewItem).Items.Add(tvi); 

* _subItemContextMenu *在樹狀資源:

<ContextMenu x:Key="_subItemContextMenu"> 
     <MenuItem Header="Remove" Click="MenuItem_Remove" /> 
</ContextMenu>