如何为 listView 中的每个项目实现上下文菜单

How to implement a context menu for each item in a listView

我正在编写一个通用 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());
    }
}

您可以使用 ListView 的 ItemTemplate 属性 向列表项添加弹出按钮。

只需为项目定义 DataTemplate,它将应用于每个列表项目:

<ListView x:Name="lstvwHours">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" FlyoutBase.AttachedFlyout="{StaticResource flymenDelete}" RightTapped="lstvwHours_RightTapped" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>