Silverlight上下文菜单:如何确定单击了哪个菜单?

时间:2010-12-20 18:06:24

标签: silverlight windows-phone-7

我有以下上下文菜单:

                <ListBox x:Name="sectionList" Margin="56,8,15,0" FontSize="64" SelectionChanged="SectionList_SelectionChanged">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <toolkit:ContextMenuService.ContextMenu>
                                    <toolkit:ContextMenu>
                                        <toolkit:MenuItem Header="Hide this section from this list" Click="ContextMenuItem_Click" />
                                    </toolkit:ContextMenu>
                                </toolkit:ContextMenuService.ContextMenu>
                                <TextBlock Text="{Binding DisplayName}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

如您所见,每个显示的项目都有自己的上下文菜单。每个上下文菜单都连接到同一个事件处理程序:

    private void ContextMenuItem_Click(object sender, RoutedEventArgs e)
    {

    }

通过此方法,如何判断单击了哪个上下文菜单?我想知道相应DataContext的{​​{1}}是什么。

3 个答案:

答案 0 :(得分:4)

您可以通过将发件人转换为FrameworkElement来获取ListBoxItem绑定的项目,以便访问DataContext

(sender as FrameworkElement).DataContext

然后,您可以将其转换为相应的模型类并访问所需的详细信息。 e.g:

((sender as FrameworkElement).DataContext as ItemViewModel).DisplayName

答案 1 :(得分:1)

如果在事件处理程序ContextMenuItem_Click,中放置断点,则可以检查sendere的属性。你可能会在那里找到答案。

执行此操作的一种方法是将鼠标悬停在这些单词上。另一种方法是使用立即窗口。输入sender和一个点以获得智能感知。

答案 2 :(得分:1)

如果您使用<StackPanel Tag="{Binding}">,那么((FrameworkElement)sender).Tag将返回DataContext对象(当然,您必须在使用前将其强制转换)。