我正在编写一个通用的Windows 8.1应用程序,我对上下文菜单的经验非常有限我有一个ListView
,当用户添加条目时会添加项目。我希望ListView
中的每个项目具有相同的上下文菜单,因此我创建了一个flyoutMenu资源
<Page.Resources>
<MenuFlyout x:Name="flymenDelete">
<MenuFlyoutItem Text="Delete" Click="MenuFlyoutItem_Click"/>
</MenuFlyout>
</Page.Resources>
然后我将菜单添加到我的listView
<ListView x:Name="lstvwHours" FlyoutBase.AttachedFlyout="{StaticResource flymenDelete}" HorizontalAlignment="Left" Height="264" Margin="427,77,0,0" VerticalAlignment="Top" Width="357" RightTapped="lstvwHours_RightTapped">
</ListView>
我有我的事件来处理右键单击
private void Button_RightTapped(object sender, RightTappedRoutedEventArgs e)
{
FlyoutBase.ShowAttachedFlyout((FrameworkElement)sender);
}
这个问题是它显示了一个上下文菜单,但仅针对实际的ListView
控件,而不是ListView
中的项目。我如何拥有它,以便仅在ListViewItems
被右键单击时才显示此上下文菜单,请记住这些项目不是硬编码的,并且添加了以下代码。
private void DisplayHours()
{
for (int i = 0; i < HList.Count(); i++)
{
lstvwHours.Items.Add(this.HList[i].display());
}
}
答案 0 :(得分:2)
您可以通过利用ListView的ItemTemplate属性将弹出按钮添加到列表项。
只需为项目定义DataTemplate,它就会应用于每个列表项:
<ListView x:Name="lstvwHours">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" FlyoutBase.AttachedFlyout="{StaticResource flymenDelete}" RightTapped="lstvwHours_RightTapped" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>