特定の TreeViewItem に ContextMenu を指定する際に少し問題があります。
<TreeView x:Name="_filesTree">
<TreeView.Resources>
<ContextMenu x:Key="_rootContextMenu">
<MenuItem Header="Add..." Click="MenuItem_Click" />
</ContextMenu>
</TreeView.Resources>
<TreeViewItem Header="Persistent" ContextMenu="{DynamicResource _rootContextMenu}"/>
<TreeViewItem Header="Temporary" ContextMenu="{DynamicResource _rootContextMenu}" />
</TreeView>
クリック ハンドラー:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
Point menuClickPoint = ((sender as FrameworkElement).Parent as ContextMenu).TranslatePoint(new Point(0, 0), _filesTree);
DependencyObject obj = _filesTree.InputHitTest(menuClickPoint) as DependencyObject;
while (obj != null && !(obj is TreeViewItem))
{
obj = VisualTreeHelper.GetParent(obj);
}
(obj as TreeViewItem).Items.Add("(new)");
}
そして、私の *MenuItem_Click* イベント ハンドラーで、クリックされたアイテムに新しい TreeViewItems を追加しています。ただし、新しいものを追加した後 (たとえば、"Persistent" サブツリーに)、この新しいサブアイテムを右クリックすると、コンテキスト メニューが再び開きます。これらの新しく追加されたアイテムには別のコンテキスト メニューが必要なので ([削除] オプションを使用)、これは必要ありません。サブツリー内ではなく、ルート項目 (TextBlock) を右クリックしたときにのみコンテキスト メニューが開くようにする方法を教えてください。
ありがとうございました