You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET MAUI的FlyoutItem集合中使用OnPlatform条件添加ShellContent?

在.NET MAUI中通过OnPlatform为FlyoutItem条件添加ShellContent的解决方法

原代码编译失败的核心问题是OnPlatform的x:TypeArguments指定错误,FlyoutItem.Items集合接收的是ShellContent类型元素,而非Items。下面提供两种可行的实现方案:

方案一:单平台单ShellContent场景

将OnPlatform的目标类型设为ShellContent,直接返回对应平台的ShellContent实例:

<Shell>
    <FlyoutItem>
        <OnPlatform x:TypeArguments="ShellContent">
            <On Platform="iOS">
                <ShellContent
                    Title="Map"
                    ContentTemplate="{DataTemplate pages:MapPage}"
                    Route="MapPage" />
            </On>
            <On Platform="Android">
                <ShellContent
                    Title="Map"
                    ContentTemplate="{DataTemplate pages:AMapPage}"
                    Route="MapPage" />
            </On>
            <!-- 可选:添加Windows等其他平台的配置,或设置Default兜底 -->
            <On Platform="Default">
                <ShellContent
                    Title="Map"
                    ContentTemplate="{DataTemplate pages:MapPage}"
                    Route="MapPage" />
            </On>
        </OnPlatform>
        <!-- 此处可继续添加通用的ShellContent项 -->
    </FlyoutItem>
</Shell>

方案二:单平台多ShellContent场景

如果需要为不同平台返回多个ShellContent,可将OnPlatform的目标类型设为List<ShellContent>,用x:Array包装多个元素:

<Shell xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
    <FlyoutItem>
        <OnPlatform x:TypeArguments="List&lt;ShellContent&gt;">
            <On Platform="iOS">
                <x:Array Type="ShellContent">
                    <ShellContent
                        Title="Map"
                        ContentTemplate="{DataTemplate pages:MapPage}"
                        Route="MapPage" />
                    <ShellContent
                        Title="iOS专属页"
                        ContentTemplate="{DataTemplate pages:iOSOnlyPage}"
                        Route="iOSOnlyPage" />
                </x:Array>
            </On>
            <On Platform="Android">
                <x:Array Type="ShellContent">
                    <ShellContent
                        Title="Map"
                        ContentTemplate="{DataTemplate pages:AMapPage}"
                        Route="MapPage" />
                    <ShellContent
                        Title="Android专属页"
                        ContentTemplate="{DataTemplate pages:AndroidOnlyPage}"
                        Route="AndroidOnlyPage" />
                </x:Array>
            </On>
        </OnPlatform>
    </FlyoutItem>
</Shell>

关键注意事项

  • 确保根元素已声明x命名空间:xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml",否则x:Array和x:TypeArguments无法解析。
  • 为所有目标平台配置对应的On节点,或设置Default节点兜底,避免运行时出现未匹配平台的空值问题。

内容的提问来源于stack exchange,提问作者Michael S. Scherotter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:40:58