Associating TreeView with ContextMenu in Xaml

I am new to Haml and need some advice.

TreeView must be bound to the hierarchical structure of the object. TreeView must have a context menu that is specific to each type of object.

I tried the following:

<TreeView>
  <TreeView.Resources>
    <DataTemplate x:Key="RoomTemplate">
      <TreeViewItem Header="{Binding Name}">
        <TreeViewItem.ContextMenu>
          <ContextMenu>
            <MenuItem Header="Open" />
            <MenuItem Header="Remove" />
          </ContextMenu>
        </TreeViewItem.ContextMenu>
      </TreeViewItem>
    </DataTemplate>
  </TreeView.Resources>

  <TreeViewItem Header="{Binding Name}" Name="tviRoot" IsExpanded="True" >

  <TreeViewItem Header="Rooms"  
                ItemsSource="{Binding Rooms}"
                ItemTemplate="{StaticResource RoomTemplate}">
    <TreeViewItem.ContextMenu>
      <ContextMenu>
        <MenuItem Header="Add room"></MenuItem>
      </ContextMenu>
    </TreeViewItem.ContextMenu>
  </TreeViewItem>
</TreeViewItem>

But with this markup, the behavior will be as intended, but the children's elements (rooms) are too far back.

In any case, all the bing samples I could find use TextBlock instead of TreeViewItem in the DataTemplate, but are wondering how to integrate ContextMenu.

+3
source share
1 answer

DataTemplate, TreeViewItem, TreeViewItem - , DataTemplate, - , TreeViewItem. , , TextBlocks TreeViewItems DataTemplate.

, TreeViewItem, TextBlock , ( ) TreeViewItem DataTemplate ( ) () TreeViewItem ( ), TextBlock TreeViewItem . ContextMenu , TextBlock ContextMenu.

, DataTemplate :

<DataTemplate x:Key="RoomTemplate">
  <TextBlock Text="{Binding Name}">
    <TextBlock.ContextMenu>
      <ContextMenu>
        <MenuItem Header="Open" />
        <MenuItem Header="Remove" />
      </ContextMenu>
    </TextBlock.ContextMenu>
  </TextBlock>
</DataTemplate>

, TreeViews HierarchicalDataTemplate, DataTemplate, HierarchicalDataTemplate.ItemsSource. .

+8

Source: https://habr.com/ru/post/1738105/


All Articles