2014-06-09 64 views
0

我有一個ContextMenu出現在TreeViewItem的右鍵單擊上。我現在想要做的是將關於TreeViewItem的一些細節傳遞給上下文菜單。將TreeViewItem的細節綁定到ContextMenu

我會怎麼做,從這裏開始的:

XAML

<TreeView x:Class="MyApp.TreeControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300" 
     PreviewMouseLeftButtonDown="TreeView_PreviewMouseLeftButtonDown" 
     PreviewMouseMove="TreeView_PreviewMouseMove" 
     PreviewMouseRightButtonDown="TreeControl_OnPreviewMouseRightButtonDown"> 
<TreeView.ContextMenu> 
    <ContextMenu> 
     <MenuItem Name="dataItem1" Header="Property1"></MenuItem> 
     <MenuItem Name="dataItem2" Header="Property2"></MenuItem> 
     <Separator/> 
     <MenuItem Name="taskItem" Header="Tasks" Click="TaskItem_OnClick"></MenuItem> 
    </ContextMenu> 
</TreeView.ContextMenu> 
</TreeView> 

我想Property1Property2在馬上就是點擊樹型視圖這些屬性的值替換的話,那種像:{binding selectedItem.Property1}

代碼:(基本上以突出顯示點擊的節點)

private void TreeControl_OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    TreeViewItem treeViewItem = VisualUpwardSearch(e.OriginalSource as DependencyObject); 

    if (treeViewItem != null) 
    { 
     treeViewItem.IsSelected = true; 
     treeViewItem.Focus(); 
     e.Handled = true; 
    } 
} 

回答

0

,你需要做的第一件事就是將數據綁定您的MenuItem.Header屬性,你設置成ContextMenu.DataContext對象:

<ContextMenu DataContext="{Binding PlacementTarget.Tag, RelativeSource={ 
     RelativeSource Self}}"> 
    <MenuItem Name="dataItem1" Header="{Binding Property1}"></MenuItem> 
    <MenuItem Name="dataItem2" Header="{Binding Property2}"></MenuItem> 
    <Separator/> 
    <MenuItem Name="taskItem" Header="Tasks" Click="TaskItem_OnClick"></MenuItem> 
</ContextMenu> 

這是什麼PlacementTarget.Tag,我聽到你問。縱觀ContextMenu.PlacementTarget property頁面上MSDN,我們看到它:

獲取或設置UIElement相對於它打開時,它的ContextMenu定位。

在簡單的英語,只是意味着具有施加到它的ContextMenu UI元素。現在Tag屬性只是一個object類型的免費屬性,我們可以放入任何東西。在你的情況下,我們打算將ContextMenu.DataContext的值放在那裏,因爲我們不能直接設置它,因爲ContextMenu不是一般UI可視化樹的一部分:

現在你沒有顯示代碼您將ContextMenu應用於TreeViewItem,但在同一位置,您需要將Tag屬性設置爲要設置爲ContextMenu.DataContext值的對象。所以我們把它傳到這裏,並在ContextMenu中拿出來,如代碼示例所示。

欲瞭解更多的信息,請看看我的答案從ContextMenu.PlacementTarget is not getting set, no idea whyAdd context menu in datagrid, how to get the select Item value問題在這裏堆棧溢出。

相關問題