Context Menu for XAML Treeviewitem (Distinguished by different attributes)

后端 未结 3 1986
太阳男子
太阳男子 2021-02-04 00:40

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

相关标签:
3条回答
  • 2021-02-04 01:07

    You could define the ContextMenus in several styles and select the style using a ItemContainerStyleSelector, based on those attributes.

    Or you could directly specify an ItemContainerStyle and select the appropriate ContextMenu using triggers

    0 讨论(0)
  • 2021-02-04 01:29

    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;
        }
    }
    
    0 讨论(0)
  • 2021-02-04 01:34
    <TreeView>
      <TreeView.Resources>
        <ContextMenu x:Key="ScaleCollectionPopup">
          <MenuItem Header="New Scale..."/>
        </ContextMenu>
        <ContextMenu x:Key="ScaleItemPopup">
          <MenuItem Header="Remove Scale"/>
        </ContextMenu>
      </TreeView.Resources>
      <TreeViewItem Header="Scales" ItemsSource="{Binding Scales}" ContextMenu="{StaticResource ScaleCollectionPopup}">
        <TreeViewItem.ItemContainerStyle>
          <Style TargetType="{x:Type TreeViewItem}">
            <Setter Property="ContextMenu" Value="{StaticResource ScaleItemPopup}"/>
          </Style>
        </TreeViewItem.ItemContainerStyle>
      </TreeViewItem>
    </TreeView>
    
    0 讨论(0)
提交回复
热议问题