UWP 将 MenuFlyout(Item) 动态添加到现有的 menuflyout

UWP add MenuFlyout(Item) dynamically to an existing menuflyout

我的 DataTemplate 中的一个 Grid 目前有这个 Flyout

                    <Grid.ContextFlyout>
                        <MenuFlyout x:Name="AlbumFlyout">
                            <MenuFlyoutItem Icon="Shuffle" Text="Shuffle" />
                            <MenuFlyoutItem Icon="Delete" Text="Delete" />
                        </MenuFlyout>
                    </Grid.ContextFlyout>

我还有一个动态生成的Flyout

    public static MenuFlyout GetAddToPlaylistFlyout()
    {
        MenuFlyout flyout = new MenuFlyout();
        flyout.Items.Add(new MenuFlyoutItem()
        {
            Icon = new FontIcon() { Glyph = "\uEC4F" },
            Text = "Now Playing"
        });
        flyout.Items.Add(new MenuFlyoutSeparator());
        flyout.Items.Add(new MenuFlyoutItem()
        {
            Icon = new SymbolIcon(Symbol.Add),
            Text = "New Playlist"
        });
        foreach (var playlist in Settings.settings.Playlists)
        {
            var item = new MenuFlyoutItem()
            {
                Icon = new SymbolIcon(Symbol.Audio),
                Text = playlist.Name
            };
            flyout.Items.Add(item);
        }
        return flyout;
    }

它是动态生成的,因为我需要经常重复使用它,其中一些 MenuFlyoutItem 是根据用户数据生成的。

如何将代码生成的 Flyout 插入 Delete 上方 Shuffle 的正下方?

---更新---

这是我的 ListView 定义的一部分。

<ListView
    x:Name="SongsListView"
    Grid.Row="1"
    AllowDrop="True"
    CanDrag="True"
    CanReorderItems="True"
    ContainerContentChanging="SongsListView_ContainerContentChanging"
    IsItemClickEnabled="True"
    ItemClick="SongsListView_ItemClick"
    ItemsSource="{Binding Songs, Mode=TwoWay}"
    ReorderMode="Enabled"
    SelectionMode="None">
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            <Setter Property="ContextFlyout" Value="{StaticResource ListViewItemContextFlyout}" />
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

您似乎有两个固定项目,ShuffleDelete

您想在这两个项目之间插入新生成的 MenuFlyout 项目。试试这个代码:

var newFlyout = GetAddToPlaylistFlyout();
foreach(var item in newFlyout.Items)
{
    AlbumFlyout.Items.Insert(AlbumFlyout.Items.Count - 1, item);
}

顺便说一句,如果你的AlbumFlyoutDataTemplate中,可能在Code-behind中不可用,你可以尝试把它放在Page.Resources中,然后引用它StaticResource.

此致。