如何为 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>
我正在编写一个通用 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>