Silverlight Windows Phone 8-ListBox中ListBoxItem的上下文菜单

Silverlight Windows Phone 8-ListBox中ListBoxItem的上下文菜单,silverlight,xaml,windows-phone-8,silverlight-toolkit,Silverlight,Xaml,Windows Phone 8,Silverlight Toolkit,我有一个ListBox(绑定到一个可观察的集合),其ListBoxItems设计在ItemsPanel StaticResource中定义。 ItemsPanel在App.xml中定义(比如将我的东西放在中心位置,ListBoxItem的设计用于不同的页面) 现在,对于每个列表框,我需要有一个不同的ContextMenu,然后出现了一个问题,我无法工作 在my App.xaml(小演示-不想夸大主题,此处): 在my MainPage.xaml中,我定义了列表框: <ListBox I

我有一个ListBox(绑定到一个可观察的集合),其ListBoxItems设计在ItemsPanel StaticResource中定义。 ItemsPanel在App.xml中定义(比如将我的东西放在中心位置,ListBoxItem的设计用于不同的页面) 现在,对于每个列表框,我需要有一个不同的ContextMenu,然后出现了一个问题,我无法工作

在my App.xaml(小演示-不想夸大主题,此处):


在my MainPage.xaml中,我定义了列表框:

<ListBox ItemsSource="{Binding Items}" 
         ItemTemplate="{StaticResource ListItemTemplate}">

    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="toolkit:ContextMenuService.ContextMenu">
                <Setter.Value>
                    <toolkit:ContextMenu>
                        <toolkit:MenuItem Header="Test" />
                    </toolkit:ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

但是,如果长按ListBoxItem,则什么也不会发生。我没有错误-没有-但是Contextmenu没有显示。。。(不在模拟器中,也不在设备上)


如果我将ContextMenu添加到LayoutRoot网格或其他内容中,它就像一个符咒。

您应该尝试将ContextMenu放入ListItemTemplate中

<Application.Resources>
<DataTemplate x:Key="ListItemTemplate">
    <StackPanel>
        <toolkit:ContextMenuService.ContextMenu>
            <toolkit:ContextMenu>
                <toolkit:MenuItem x:Name="DoneMenuItem" 
                    Header="Done"
                    Command="{Binding Main.DoneCommand, Source={StaticResource Locator}}"
                    CommandParameter="{Binding}"/>
            </toolkit:ContextMenu>
        </toolkit:ContextMenuService.ContextMenu>
        <TextBlock Text="{Binding Title}" />
    </StackPanel>
</DataTemplate>


您还可以删除ListBox.ItemContainerStyle标记

嗨,Fabrice,谢谢您的帖子。您能解释一下命令和CommandParameter的作用吗?绑定到哪里去了?事实上,如果不使用MVVM模式,可以在菜单项中使用Click事件。使用我的代码(和MVVM模式),我将从我的ViewModel执行一个命令,并将列表框中的selecteditem作为命令的参数传递。无论如何,您只需在菜单项中使用click事件即可。装订是一样的,上面写着:谢谢。那是丢失的东西。这是一个相当大的话题,需要更多的阅读。基本上,我现在添加了一个类,包含我的命令,并将其作为静态资源添加,以使代码分离,而不会弄乱我的ViewModel。让我有些头疼的是装订会结束,但一切都很顺利:)
<Application.Resources>
<DataTemplate x:Key="ListItemTemplate">
    <StackPanel>
        <toolkit:ContextMenuService.ContextMenu>
            <toolkit:ContextMenu>
                <toolkit:MenuItem x:Name="DoneMenuItem" 
                    Header="Done"
                    Command="{Binding Main.DoneCommand, Source={StaticResource Locator}}"
                    CommandParameter="{Binding}"/>
            </toolkit:ContextMenu>
        </toolkit:ContextMenuService.ContextMenu>
        <TextBlock Text="{Binding Title}" />
    </StackPanel>
</DataTemplate>