如何为listView

时间:2015-06-17 06:51:14

标签: c# listview windows-phone-8.1 windows-8.1 win-universal-app

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

1 个答案:

答案 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>