ボタンの上で右クリックメニュー表示ではなく、ウィンドウどこでも右クリックでメニューを表示する方法の備忘録です。

XAMLでContextMenuを作成する

ウィンドウ全体の当たり判定を付ける

デフォルトだと、

<Window x:Class=~
        Title="MainWindow" Height="450" Width="450">
    <Grid>
    </Grid>
</Window>

とかになっていると思います。 ここの

<Grid></Grid>

に当たり判定として

Background="#ffffff"

のような背景色を設定しておきます。
これが無いとGrid内のTextBlock要素の上を右クリックしたときしかメニューが表示されません。

GridにContextMenuを追加

Gridの中に

        <Grid.ContextMenu>
            <ContextMenu>
                <MenuItem Header="メニュー" Click=""/>
                <MenuItem Header="メニュー2" Click=""/>
            </ContextMenu>
        </Grid.ContextMenu>

を入れましょう。 これで右クリックメニューができました。

メニュー要素を選択したときの処理

xaml.csなどで、

        private void Menu_Click(object sender, RoutedEventArgs e)
        {

        }

を追加して、中にそれぞれの処理を書いていきます。
Menu_ClickはXAMLのClick=““と揃えましょう。

全体のコード

xaml

<Window ~
        Title="MainWindow" Height="450" Width="450">

    <Grid Background="#ffffff">
        <Grid.ContextMenu>
            <ContextMenu>
                <MenuItem Header="メニュー" Click="Menu_Click"/>
                <MenuItem Header="メニュー2" Click="Menu2_Click"/>
            </ContextMenu>
        </Grid.ContextMenu>
        
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24" Text="右クリックでメニュー表示"/>
    </Grid>
</Window>

xaml.cs

        private void Menu_Click(object sender, RoutedEventArgs e)
        {

        }

        private void Click="Menu2_Click"(object sender, RoutedEventArgs e)
        {
          
        }