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アプリ更新時のロールアウト設定まとめ