2013-03-06 43 views
0

如何創建一個上下文菜單,當用戶右鍵單擊我的樹視圖的某個元素時,該菜單會顯示出來?ContextMenu和TreeView

我想知道被點擊的項目的名稱,這可能怎麼樣?

這是我的樹視圖:

<TreeView Name="tvwResultados" 
        MouseMove="DataGrid_MouseMove" 
        MouseLeftButtonDown="DataGrid_PreviewMouseLeftButtonDown" 
        ItemTemplate="{StaticResource empresaTemplate}" 
        ItemsSource="{Binding Empresas}" 
        Padding="0,6,0,6" 
        Background="Black" 
        BorderBrush="Gray" 
        BorderThickness="1"> 
      <TreeView.ItemContainerStyle> 
       <Style TargetType="{x:Type TreeViewItem}"> 
        <Setter Property="BorderThickness" Value="1" /> 
        <Setter Property="Padding" Value="4,2,4,2" /> 
        <Style.Triggers> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter Property="BorderBrush" Value="Gray" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </TreeView.ItemContainerStyle> 
      <TreeView.Resources> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#171717" /> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Silver" /> 
       <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#333333" /> 
       <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Silver" /> 
       <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Gray" /> 
       <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Silver" /> 
      </TreeView.Resources> 
     </TreeView> 

回答

1

有幾種方法可以添加一個ContextMenuTreeViewItems這取決於很多因素。例如,ContextMenu是否與每個TreeViewItem相同? MenuItems從哪裏來?

一個解決方案是將ContextMenu添加到您的ItemContainerStyle。您可以在Window定義ContextMenu作爲資源或任何最高級別控制是這樣的:

<Window.Resources> 
    <ContextMenu x:Key="TreeItemMenu"> 
     <MenuItem Header="Menu Item 1" Click="MenuItem_Click_1"/> 
     <MenuItem Header="Menu Item 2" Click="MenuItem_Click_2"/> 
    </ContextMenu> 
</Window.Resources> 

然後你就可以更新您的ItemContainerStyle使用此ContextMenu這樣的:

<TreeView.ItemContainerStyle> 
    <Style TargetType="{x:Type TreeViewItem}"> 
     <Setter Property="BorderThickness" Value="1" /> 
     <Setter Property="Padding" Value="4,2,4,2" /> 
     <Setter Property="ContextMenu" Value="{DynamicResource TreeItemMenu}"/> 
     <Style.Triggers> 
      <Trigger Property="IsSelected" Value="True"> 
       <Setter Property="BorderBrush" Value="Gray" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</TreeView.ItemContainerStyle> 

要獲得點擊的物品,您需要分開處理。您可以使用EventSetter將事件附加到每個TreeViewItem,然後跟蹤其項目最後單擊像這樣:

這個添加到樣式的制定者:

<EventSetter Event="MouseRightButtonDown" Handler="OnTreeItemClicked"/> 

然後這正好中的代碼背後:

private void OnTreeItemClicked(object sender, MouseButtonEventArgs e) 
{ 
    _item = sender as TreeViewItem; 
    if (_item != null) 
    { 
     string header = _item.Header.ToString(); 
    } 
} 

這將添加相同ContextMenu每個TreeViewItem,它硬編碼MenuItems,但它說明了如何將添加一個ContextMenu 。你當然可以獲得更多的靈活/動態/高級,但是這應該爲你入門奠定基礎。

1

更容易...將工具箱中的ContextMenuStrip添加到設計視圖中。根據需要添加菜單選項(如果您願意,可以重命名該名稱,或者將其留在ContextMenuStrip1上。然後,您只需在設計模式中選擇TreeView,然後設置上下文菜單中的樹形視圖