我在我的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
是从用户数据生成的。
我该如何在Shuffle
上方、Delete
下方插入代码生成的Flyout
?
---更新---
这是我的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>
MenuFlyout
是DataTemplate的子级,则可以考虑将MenuFlyout放在资源中以便获取它。 - Richard ZhangMenuFlyout
放入Resource
中,并使用ListView.ItemContainerStyle
分配了MenuFlyout
,但现在我又遇到了另一个问题。我曾经可以通过(sender as MenuFlyoutItem).DataContext
访问绑定到 DataTemplate 的数据。现在它返回null
。我该如何获取数据? - Seaky Lone<Setter Property="ContextFlyout" Value="{StaticResource ListViewItemContextFlyout}" />
但我仍然得到null。我将其放在ListView.ItemContainerStyle
的样式中。 - Seaky LoneDataTemplate
将Grid
作为其内容。那么,我应该将MenuFlyout
注册到Grid.ContextFlyout
中吗?但是这样做的问题是右键单击只有在我点击ListViewItem
上的UI元素时才会触发flyout。将其添加到ListView.ItemContainerStyle
可以使其在任何地方都起作用。 - Seaky Lone