Search code examples
wpfxamlcontextmenutreeviewitem

Context Menu for XAML Treeviewitem (Distinguished by different attributes)


In XAML, how do you define a context menu for treeviewitems that are distinguished by different attributes?


Solution

  • XAML

    <TreeView Name="SolutionTree"  BorderThickness="0" SelectedItemChanged="SolutionTree_SelectedItemChanged"  >
      <TreeView.Resources>
        <ContextMenu x:Key ="SolutionContext"  StaysOpen="true">
          <MenuItem Header="Add..." Click="AddFilesToFolder_Click"/>
          <MenuItem Header="Rename"/>
        </ContextMenu>
        <ContextMenu x:Key="FolderContext"  StaysOpen="true">
          <MenuItem Header="Add..." Click="AddFilesToFolder_Click"/>
          <MenuItem Header="Rename"/>
          <MenuItem Header="Remove"/>
          <Separator/>
          <MenuItem Header="Copy"/>
          <MenuItem Header="Cut"/>
          <MenuItem Header="Paste"/>
          <MenuItem Header="Move"/>
        </ContextMenu>
      </TreeView.Resources>
    </TreeView>
    

    C-sharp

    private void SolutionTree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
    {
        TreeViewItem SelectedItem = SolutionTree.SelectedItem as TreeViewItem;
        switch (SelectedItem.Tag.ToString())
        {
            case "Solution":
                SolutionTree.ContextMenu = SolutionTree.Resources["SolutionContext"] as System.Windows.Controls.ContextMenu;
                break;
            case "Folder":
                SolutionTree.ContextMenu = SolutionTree.Resources["FolderContext"] as System.Windows.Controls.ContextMenu;
                break;
        }
    }