WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】

MenuFlyoutをShowAtで表示
2025-04-11

MenuFlyout とは?

WinUI 3で利用できるMenuFlyoutは、コンテキストメニューやポップアップメニューを簡単に実装できる便利なUI要素です。通常は右クリックや長押しで表示されますが、C#コードからも任意のタイミングで表示することが可能です。

ShowAtメソッドを使ってMenuFlyoutを表示する

MenuFlyout.ShowAtを使えば、指定したUI要素に対して任意の位置にメニューを表示できます。以下にサンプルコードを紹介します。

XAMLコード

<Grid Width="200" Height="200" Background="BlueViolet" x:Name="g1">
    <Grid.ContextFlyout>
        <MenuFlyout x:Name="m1">
            <MenuFlyoutItem Text="右クリック メニュー1" />
            <MenuFlyoutItem Text="右クリック メニュー2" />
        </MenuFlyout>
    </Grid.ContextFlyout>
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">右クリック</TextBlock>
</Grid>
<Button Content="メニューを開く" Click="myButton_Click" />

C#コード

private void myButton_Click(object sender, RoutedEventArgs e)
{
    DispatcherQueue.TryEnqueue(() =>
    {
        try
        {
            var options = new FlyoutShowOptions
            {
                Position = new Point(0, 0),
                Placement = FlyoutPlacementMode.Top
            };
            m1.ShowAt(null, options);
        }
        catch (Exception ex)
        {
            Debug.WriteLine($"{ex.Message}");
        }
    });
}

ポイント: ShowAt(null, options) とすることで、FlyoutShowOptions.Position に基づいた位置に表示されます。相対対象がないため絶対位置的な扱いになります。

まとめ

WinUI 3 / XAML の Grid.Width 設定方法

WinUI 3でMenuFlyoutをShowAtで表示する方法【コード付き解説】

MenuFlyoutWinUI 3 で便利なポップアップメニュー

WinUI 3の開発で混乱しがちな「空白のウィンドウ」と「空白のページ」の違い

PowerShellでMSIXアプリ(Storeアプリ)を起動する方法|AppUserModelIdとURIスキーム活用術

Microsoft Storeアプリ更新時のロールアウト設定まとめ

Microsoft純正の新しいコンソールエディタ「edit」が復活!| edit.exe インストール方法

Microsoft Authenticatorのオートフィル機能が2025年7月に終了

RuntimeBroker.exeとMsEdgeWebView2.exeとは?Windows 11のプロセスについて

PowerShellでGrapheme Clusterについて処理を考える

【Windows】Volta コマンドライン インストール | Node.jsをバージョン管理する方法

【C#】大容量ファイルを指定サイズ以下に分割する方法|.NET8対応コード付き

【C# .NET 8】ファイルから重複行を削除する2つの方法|Distinct vs HashSet

【C#】.emlファイルの本文を読みやすく抽出する方法

WinUI 3 ComboBoxの自作クラスバインドと選択イベント検出方法

switch文でオブジェクトの型を判別する方法

【WPF】Task.Run中にUIを更新する方法

System.Text.Json 9.0.0.0 で FileNotFoundException

C#で改行・カンマ入りのCSVを正しく読み込む方法【.NET8対応】

C#/.NET 8でDateTimeを日本時間でISO 8601形式に変換する方法

Windows 11でタスクマネージャー以外からアプリを終了させる方法【PowerShell・コマンドプロンプト】

和暦設定でも安心!C#でISO 8601やカスタム日時文字列を確実にDateTimeに変換