This comes years later but given that no answer was proposed, perhaps someone may benefit from this. What has worked for me is to define a context menu in the TreeView.Resources section and give it a key for identification, as follows:
<TreeView.Resources>
<ContextMenu x:Key="ChildContextMenu">
<MenuItem Header="View"/>
<MenuItem Header="Edit"/>
<MenuItem Header="Print"/>
<MenuItem Header="Delete"/>
<MenuItem Header="Batch actions">
<MenuItem Header="View all"/>
<MenuItem Header="Edit all"/>
<MenuItem Header="Print all"/>
<MenuItem Header="Delete all"/>
</MenuItem>
</ContextMenu>
</TreeView.Resources>
The above context menu can then be attached to whichever control used as a TreeViewItem, as follows (here I set the context menu on the TextBlock):
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Sample}" ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Parent}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" ContextMenu="{StaticResource ChildContextMenu}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
The complete code becomes:
<TreeView>
<TreeView.Resources>
<ContextMenu x:Key="ChildContextMenu">
<MenuItem Header="View"/>
<MenuItem Header="Edit"/>
<MenuItem Header="Print"/>
<MenuItem Header="Delete"/>
<MenuItem Header="Batch actions">
<MenuItem Header="View all"/>
<MenuItem Header="Edit all"/>
<MenuItem Header="Print all"/>
<MenuItem Header="Delete all"/>
</MenuItem>
</ContextMenu>
</TreeView.Resources>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Sample}" ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Parent}"/>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}" ContextMenu="{StaticResource ChildContextMenu}"/>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
The logic to handle clicks can be attached in various ways, one of them being per MenuItem. I hope this helps.