在 Xamarin.Forms Shell 中使用 ShellSection 时,为什么分隔符不显示在浮出控件中?

问题描述

在我的 Xamarin.Forms Shell 应用程序中,我在 AppShell.xaml.cs 文件而不是 AppShell.xaml 文件中定义弹出项目,因为我需要以编程方式定义它们。 Here,我读到我可以使用 FlyoutdisplayOptions.AsMultipleItems 值来获取分隔符。因此,我不明白为什么在我使用 ShellSection 元素并将其 FlyoutdisplayOptions 设置为 FlyoutdisplayOptions.AsMultipleItems 时 Xamarin 不显示分隔符。我用来定义弹出项目的代码如下:

var nli = new FlyoutItem   { FlyoutdisplayOptions = FlyoutdisplayOptions.AsMultipleItems };
var nc  = new ShellSection { FlyoutdisplayOptions = FlyoutdisplayOptions.AsMultipleItems };

foreach (var kind in kinds) { // "kinds" is retrieved from a service
   var csc = new ShellContent { /* ... */ };
   nc.Items.Add(csc);
}

nli.Items.Add(nc);
ShellItems.Items.Add(nli);

enter image description here

红色区域是由 foreach 语句填充的区域。 FlyoutItemShellSection 父项的 FlyoutdisplayOptions 设置正确,但分隔符未显示ShellContent 元素之间。为什么?

解决方法

要在 FlyoutItems 或 MenuItems 之间添加分隔符,您可以添加带有 DataTemplate 的 MenuItem,如下所示:

<MenuItem>
    <Shell.MenuItemTemplate>
        <DataTemplate>
            <Label HeightRequest="1" BackgroundColor="LightGray"></Label>
        </DataTemplate>
    </Shell.MenuItemTemplate>
</MenuItem>

您或许可以将其转换为代码隐藏。 这是它的外观:

FlyoutMenu with Separators

,

应该是shell中的默认现象,FlyoutItem中的项之间没有分隔符。

你可以看看official document

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...