ListViewの余白部分を右クリックしたときにポップアップメニューを出す場合、ListViewのContextMenuは使えません。 余白だけでなく、ListViewItemなどをクリックしたときにもポップアップメニューが出てしまうためです。 そのとき、ListViewItemに載せたコントロールにContextMenuを付けてもListViewのContextMenuが優先されて、ListViewItemのメニューは表示されません。 ListViewItemのContextMenuOpeningイベントで
とかすればListViewItemをクリックしたときポップアップメニューが表示されないようにはできますが、当然そうするとListViewItemのContextMenuは使えません。
解決策はうまく検索すれば見つかりそうですが、見つからなかったので自分でやり方を試行錯誤しました。 で、見つかったのがこれ。 結局単純なやり方で済ませました。
ListViewのMouseRightButtonUpイベントでポップアップメニューを出します。 マウスのボタンが離された場所でヒットテストをして、ListViewのスクロールに使われるScrollViewerだったら余白と判断、ポップアップメニューを表示します。 別のコントロールだったら何もしません。 それだけ。
サンプルコードはこんな感じです。 まずはMainWindow.xaml。
ListViewItemの縦のマージンを0にしないと行と行の隙間をクリックしたときもメニューが表示されてしまうので注意。
MainWindow.xaml.csです。
ListViewに表示した内容は適当です。