Windows phone 中列表的上下文菜单

Posted

技术标签:

【中文标题】Windows phone 中列表的上下文菜单【英文标题】:Context menu for List in Windows phone 【发布时间】:2013-04-24 08:56:44 【问题描述】:

首先,我知道这个话题:How to make context menu work for windows phone?

但是这种方式太复杂了…… 所以我有这个 XAML 代码:

 <StackPanel Name="friendsGrid" Margin="0,0,0,0" Background="Transparent"> 
   <ListBox Name="friendsListBox" FontSize="32" Tap="friendsListBox_Tap">
     <toolkit:ContextMenuService.ContextMenu>
     <toolkit:ContextMenu Name="MyContextMenu" Opened="MyContextMenu_Opened">
     <toolkit:MenuItem Header="action" Click="contextMenuAction_Click"/>
     </toolkit:ContextMenu>
     </toolkit:ContextMenuService.ContextMenu>
   </ListBox>
 </StackPanel>

我正在填写这样的列表:

this.friendsListBox.Items.Add(friend.serviceName);

但是,当然,当我长按时,上下文菜单会出现并选择整个列表,而不仅仅是一个项目。

是否有一些简单的方法可以识别被点击的项目? 谢谢

顺便说一句,我找到了这个方法,但是 contextMenuListItem 没有收到任何东西,它仍然为空:

ListBoxItem contextMenuListItem = friendsListBox.ItemContainerGenerator.ContainerFromItem((sender as ContextMenu).DataContext) as ListBoxItem;

【问题讨论】:

你能给我们看看你的列表框项目模板吗 【参考方案1】:

您应该将 ContextMenu 块放入您的 ItemTemplate(而不是 ListBox 块)。 这里是简短的示例。 XAML:

            <ListBox Name="TestList" Margin="26,0,26,0" Height="380" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="Binding">
                        <toolkit:ContextMenuService.ContextMenu>
                            <toolkit:ContextMenu Name="ContextMenu" >
                                <toolkit:MenuItem Name="Edit" Header="Edit" Click="Edit_Click"/>
                                <toolkit:MenuItem Name="Delete"  Header="Delete" Click="Delete_Click"/>
                            </toolkit:ContextMenu>
                        </toolkit:ContextMenuService.ContextMenu>
                    </TextBlock>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

代码:

    public List<string> Items = new List<string>
    
        "Item1",
        "Item2",
        "Item3",
        "Item4",
        "Item5",
    ;

    // Constructor
    public MainPage()
    
        InitializeComponent();
        TestList.ItemsSource = Items;
    

    private void Edit_Click(object sender, RoutedEventArgs e)
    
        if (TestList.ItemContainerGenerator == null) return;
        var selectedListBoxItem = TestList.ItemContainerGenerator.ContainerFromItem(((MenuItem) sender).DataContext) as ListBoxItem;
        if (selectedListBoxItem == null) return;
        var selectedIndex = TestList.ItemContainerGenerator.IndexFromContainer(selectedListBoxItem);
        MessageBox.Show(Items[selectedIndex]);
    

希望这会有所帮助。

【讨论】:

发问者甚至没有对他的问题的解决方案投赞成票...... 蹩脚。

以上是关于Windows phone 中列表的上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章

共享点列表字段的上下文菜单

当我生成上下文菜单时,在列表视图中选择一个项目

带有列表子项可聚焦android的列表视图上下文菜单

为列表视图和列表视图项创建单独的上下文菜单

Windows Phone开发:框架和页

Windows 资源管理器 - 删除上下文菜单中的条目