.NET MAUI(.NET Multi-platform App UI)上下文菜单

在.NET MAUI(.NET Multi-platform App UI)框架中,上下文菜单(通常称为右键菜单)是一个为用户提供针对特定控件上下文相关命令的界面元素。这些菜单可以非常方便地添加到.NET MAUI应用的Mac Catalyst和Windows平台上,以增强用户体验。下面,我将从C#程序员的视角,对.NET MAUI中的上下文菜单进行详解。

上下文菜单的定义

在.NET MAUI中,上下文菜单是通过MenuFlyout类来定义的。MenuFlyout可以包含多个子项,包括:

  • MenuFlyoutItem:表示可点击的菜单项。
  • MenuFlyoutSubItem :表示可点击的子菜单项,它可以包含多个MenuFlyoutItem
  • MenuFlyoutSeparator:用于分隔菜单中的项,以提高可读性。

创建上下文菜单项

要在控件上添加上下文菜单,你可以将MenuFlyout对象添加到该控件的FlyoutBase.ContextFlyout附加属性中。当用户右键单击该控件时,上下文菜单将在点击位置显示。

例如,在WebView控件上添加上下文菜单的代码如下:

XML 复制代码
<WebView x:Name="webView" Source="https://learn.microsoft.com/dotnet/maui" MinimumHeightRequest="400">  
    <FlyoutBase.ContextFlyout>  
        <MenuFlyout>  
            <MenuFlyoutItem Text="Go to docs repo" Clicked="OnWebViewGoToRepoClicked" CommandParameter="docs" />  
            <MenuFlyoutItem Text="Go to engineering repo" Clicked="OnWebViewGoToRepoClicked" CommandParameter="eng" />  
        </MenuFlyout>  
    </FlyoutBase.ContextFlyout>  
</WebView>

在对应的后台代码中,你需要实现OnWebViewGoToRepoClicked事件处理程序,以处理菜单项的点击事件。

处理点击事件

在事件处理程序中,你可以通过sender参数获取被点击的MenuFlyoutItem对象,并访问其CommandParameter属性,以决定需要执行的操作。

cs 复制代码
void OnWebViewGoToRepoClicked(object sender, EventArgs e)  
{  
    MenuFlyoutItem menuItem = sender as MenuFlyoutItem;  
    string repo = menuItem.CommandParameter as string;  
    string url = repo == "docs" ? "docs-maui" : "maui";  
    webView.Source = new UrlWebViewSource { Url = $"https://github.com/dotnet/{url}" };  
}

创建子菜单项

你也可以在MenuFlyout中添加MenuFlyoutSubItem来创建子菜单。每个MenuFlyoutSubItem可以包含多个MenuFlyoutItem

例如,在Label控件上添加带有子菜单的上下文菜单:

cs 复制代码
<Label x:Name="label" Text="Right-click to choose color">  
    <FlyoutBase.ContextFlyout>  
        <MenuFlyout>  
            <MenuFlyoutItem Text="Black" Clicked="OnLabelClicked" CommandParameter="Black" />  
            <MenuFlyoutSubItem Text="Light">  
                <MenuFlyoutItem Text="Blue" Clicked="OnLabelClicked" CommandParameter="LightBlue" />  
                <!-- 其他子菜单项 -->  
            </MenuFlyoutSubItem>  
            <!-- 其他子菜单 -->  
        </MenuFlyout>  
    </FlyoutBase.ContextFlyout>  
</Label>

在菜单项上显示图标

MenuFlyoutItemMenuFlyoutSubItemMenuItem类继承IconImageSource属性,允许你在菜单项旁边显示图标。图标可以是图像或字体图标。但请注意,Mac Catalyst目前不支持在上下文菜单项上显示图标。

注意事项

  • 目前,运行时无法向MenuFlyout添加或删除项。
  • Mac Catalyst不支持在Entry控件上显示上下文菜单,且不支持在上下文菜单项上显示图标。

通过以上步骤和注意事项,你可以在.NET MAUI应用中灵活地实现和使用上下文菜单,为用户提供更加丰富的交互体验。

相关推荐
黄林晴16 小时前
如何判断手机是否是纯血鸿蒙系统
android
火柴就是我16 小时前
flutter 之真手势冲突处理
android·flutter
法的空间17 小时前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
循环不息优化不止17 小时前
深入解析安卓 Handle 机制
android
恋猫de小郭17 小时前
Android 将强制应用使用主题图标,你怎么看?
android·前端·flutter
jctech17 小时前
这才是2025年的插件化!ComboLite 2.0:为Compose开发者带来极致“爽”感
android·开源
用户20187928316717 小时前
为何Handler的postDelayed不适合精准定时任务?
android
叽哥18 小时前
Kotlin学习第 8 课:Kotlin 进阶特性:简化代码与提升效率
android·java·kotlin
Cui晨18 小时前
Android RecyclerView展示List<View> Adapter的数据源使用View
android
氦客18 小时前
Android Doze低电耗休眠模式 与 WorkManager
android·suspend·休眠模式·workmanager·doze·低功耗模式·state_doze