net maui 9.0 AppShell.xaml 实现多级飞出菜单办法

张中伟 80 信誉分
2025-03-03T14:32:50.0866667+00:00

我的功能流程是 登陆窗口wlogin.xaml成功后,跳转到AppShell.xaml.用飞出菜单实现多页面切换。

因为无法实现类似WINFORM的多级菜单效果。只有CONTENTPAGE才可以实现菜单的功能。所以想实现右键菜单来代替。如何弹出,点左键弹出 不了。有类似的解决方案也行。 <Shell.FlyoutFooter>

 <Button Text="详细菜单" HorizontalOptions="Center" Clicked="Button_Clicked">

     <Button.Resources>

         <MenuFlyout x:Name="mf1" x:Key="MainMenu">

             <MenuFlyoutSubItem Text="编辑">

                 <MenuFlyoutItem Text="复制" />

                 <MenuFlyoutItem Text="剪切" />

                 <MenuFlyoutSeparator/>

                 <MenuFlyoutItem Text="删除" />

             </MenuFlyoutSubItem>

             <MenuFlyoutItem Text="退出" />

         </MenuFlyout>

     </Button.Resources>

 </Button>
``` </Shell.FlyoutFooter>      private void Button_Clicked(object sender, EventArgs e)

{

  Button MyBtn = (Button)sender;

  if (MyBtn != null)

  {

      MenuFlyout MyMF = (MenuFlyout)MyBtn.Resources["MainMenu"];

      if (MyMF != null)

      {

          FlyoutBase.SetContextFlyout(MyBtn, MyMF);

        //这里如何弹出

      }

  }

}

.NET MAUI
.NET MAUI
一种 Microsoft 开源框架,用于构建跨移动设备、平板电脑、台式机的原生设备应用程序。
137 个问题
0 个注释 无注释
{count} 票

2 个答案

排序依据: 非常有帮助
  1. 匿名
    2025-03-04T06:10:14.6133333+00:00

    您好,

    因为无法实现类似WINFORM的多级菜单效果。只有CONTENTPAGE才可以实现菜单的功能。所以想实现右键菜单来代替。如何弹出,点左键弹出 不了。

    您应该把 <Button.Resources> 改成 <FlyoutBase.ContextFlyout> 如下代码,当你右击Button, 就可以看到显示上下文菜单

    <Shell.FlyoutFooter>
        <Button Text="详细菜单" HorizontalOptions="Center" Clicked="Button_Clicked">
           <FlyoutBase.ContextFlyout>
               <MenuFlyout x:Name="mf1" >
     
                     <MenuFlyoutSubItem Text="编辑" Clicked="MenuFlyoutSubItem_Clicked">
     
                         <MenuFlyoutItem Text="复制" Clicked="MenuFlyoutItem_Clicked" />
     
                         <MenuFlyoutItem Text="剪切" />
     
                         <MenuFlyoutSeparator/>
     
                         <MenuFlyoutItem Text="删除" />
     
                     </MenuFlyoutSubItem>
     
                     <MenuFlyoutItem Text="退出" />
     
                 </MenuFlyout>
            </FlyoutBase.ContextFlyout>
         </Button>
    </Shell.FlyoutFooter>
    

    这里还有一篇文档:在 .NET MAUI 桌面应用中显示上下文菜单


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。


  2. 张中伟 80 信誉分
    2025-03-04T09:36:52.9933333+00:00

    接上面,我回复的内容怎么不见了。我要达到的效果是左键点击,指定位置弹出菜单,指定弹出方向。不是右键才弹出。 <Shell.FlyoutFooter>

     <HorizontalStackLayout HorizontalOptions="Center">
    
         <Button x:Name="btnMenu" Text="主菜单" WidthRequest="100">
    
             <FlyoutBase.ContextFlyout>
    
                 <MenuFlyout x:Name="mf1" >
    
                     <MenuFlyoutSubItem Text="编辑">
    
                         <MenuFlyoutItem Text="复制"/>
    
                         <MenuFlyoutItem Text="剪切"/>
    
                         <MenuFlyoutSeparator/>
    
                         <MenuFlyoutItem Text="删除"/>
    
                     </MenuFlyoutSubItem>
    
                     <MenuFlyoutItem Text="退出" />
    
                 </MenuFlyout>
    
             </FlyoutBase.ContextFlyout>
    
         </Button>
    
     </HorizontalStackLayout>
    ``` </Shell.FlyoutFooter>
    
    0 个注释 无注释

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。