首页 > 解决方案 > Xamarin Forms 4.0 Shell Flyout Menu 顶部背景颜色设置

问题描述

我正在使用 Xamarin Forms 4.0 Shell 创建应用程序。但我无法将弹出菜单的最顶部自定义为黑色。我知道将弹出的背景颜色设置为黑色可以解决这个问题,但我需要将弹出的下部保持为其他颜色。有没有其他方法可以实现这一目标?请参阅下图以供参考。

iOS iPhone XR 模拟器截图

提前致谢!


我尝试将 UIApplication.SharedApplication.StatusBarStyle 从 Light 更改为 Default,下面的屏幕截图显示时钟以黑色字体颜色(蓝色箭头)显示,但 Wifi 电池图标消失(红色箭头)

iOS iPhone XR 模拟器截图


在 Github 上添加了示例以供审核。

标签: shellxamarin.formsflyout

解决方案


这有点晚了,但我自己也遇到了这个问题。实际上,这似乎是一个错误。我在您的 GitHub 问题上发布了一些我发现的内容,希望 Xamarin 团队能够修复。

同时,我找到了一种解决方法,可以使所有平台之间的弹出标题相同,而无需任何奇怪的其他黑客攻击。

作为完整参考 - 我发现浮出标题上方的白条实际上是下面浮出内容的一部分 - 菜单项。如果您更改弹出菜单的背景颜色,您将自己看到。似乎允许弹出菜单流入iOS安全区域,但标题不能。我所做的是在弹出标题模板的布局中使用负边距,然后设置一些填充以偏移 onplatform 块中的安全区域。因为这会有效地缩小内容区域,所以我也按平台设置了高度。这最终看起来像下面的代码:

    <Shell.FlyoutHeaderTemplate>
        <DataTemplate>
            <StackLayout BackgroundColor="{DynamicResource Primary}">
                <StackLayout.Margin>
                    <OnPlatform x:TypeArguments="Thickness">
                        <On Platform="iOS" Value="0,-1,0,0" />
                    </OnPlatform>
                </StackLayout.Margin>
                <StackLayout.Padding>
                    <OnPlatform x:TypeArguments="Thickness">
                        <On Platform="iOS" Value="0,20,0,0" />
                    </OnPlatform>
                </StackLayout.Padding>
                <StackLayout.HeightRequest>
                    <OnPlatform x:TypeArguments="x:Double">
                        <On Platform="iOS" Value="220" />
                        <On Platform="Android" Value="200" />
                    </OnPlatform>
                </StackLayout.HeightRequest>

                <ContentHere>...</ContentHere>

            </StackLayout>
        </DataTemplate>
    </Shell.FlyoutHeaderTemplate>

我不敢相信我只在此处和该 GitHub 链接中看到了这个问题......但希望这可以帮助其他任何遇到此问题的人,直到 Xamarin 团队的修复程序生效!


推荐阅读