single.php

C# WinUI3でTabViewのタブにコンテキストメニューを追加する方法

C# WinUI 3アプリを作っていく途中で、調べたことを忘録的に投稿します。今回はWinUI3プロジェクトでTabViewに追加したタブに右クリックで表示するメニューを追加する方法です。

TabViewのContextFlyoutは使えない

[TabView]コントロールの[ContextFlyout]にメニューを追加します。

<TabView
  Name="tab_main" 
  HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
  Loaded="tab_main_Loaded"
  TabCloseRequested="tab_main_TabCloseRequested"
  AddTabButtonClick="tab_main_AddTabButtonClick">
  <TabView.ContextFlyout>
    <MenuFlyout>
      <MenuFlyoutItem Text="メニュー1" />
      <MenuFlyoutItem Text="メニュー2" />
    </MenuFlyout>
  </TabView.ContextFlyout>
</TabView>

実行して、追加したタブで右クリックするとメニューがポップアップします。

しかし[TabView]に追加した[ContextFlyout]はタブ以外の部分でも表示されてしまいます。

タブだけ表示される右クリックメニュー

[TabView]に追加されたタブを右クリックして表示するメニューは、次の手順で行います。

1. 新しくタブを追加するイベントを編集して[ContextRequested]イベントを追加します。

private void tab_main_AddTabButtonClick(Microsoft.UI.Xaml.Controls.TabView sender, object args)
{
  sender.TabItems.Add(CreateTabItem(sender.TabItems.Count));
}

private TabViewItem CreateTabItem(int nIndex)
{
  TabViewItem tabviewitem = new TabViewItem();
  tabviewitem.Header = $"TabItem {nIndex}";
  TabViewContentPage tabPage = new TabViewContentPage();
  tabviewitem.Content = tabPage;
  tabviewitem.ContextRequested += Tabviewitem_ContextRequested;
  return tabviewitem;
}

2. 追加した[ContextRequested]イベントに次のコードを追加します。

private void Tabviewitem_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
{
  MenuFlyout menuFlyout = new MenuFlyout();
  MenuFlyoutItem menuFlyoutItem = new MenuFlyoutItem();
  menuFlyoutItem.Text = "メニュー1";
  menuFlyout.Items.Add(menuFlyoutItem);

  Microsoft.UI.Xaml.Controls.TabViewItem? tabviewitem = sender as Microsoft.UI.Xaml.Controls.TabViewItem;
  if (tabviewitem == null)
  {
    return;
  }

  tabviewitem.ContextFlyout = menuFlyout;
}

実行すると、タブを右クリックした際にメニューが表示されます。

まとめ

今回は、WinUI3プロジェクトでTabViewに追加したタブに右クリックで表示するメニューを追加する方法について紹介しました。

[TabView]コントロールの[ContextFlyout]にメニューに追加したメニューは、タブ以外の部分でも表示されます。

そのため、追加したタブ[TabViewItem]に[ContextRequested]イベントを追加して、メニューを追加します。

WinUI 3 アプリで[TabView]コントロールに追加したタブに右クリックメニューを表示したい人の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です