C# 上下文菜单所选项目wp7

C# 上下文菜单所选项目wp7,c#,silverlight,xaml,windows-phone-7,contextmenu,C#,Silverlight,Xaml,Windows Phone 7,Contextmenu,我有一个列表框。每个项目都有关联菜单。如果我只是按住项目并使用它,它没有被选中,我会出错。如果我第一次选择项目并使用它,一切都正常。如何选择项目按住手势 <DataTemplate> <Grid Margin="0,5"> <Grid.ColumnDefinitions> <ColumnDefinition Width=

我有一个列表框。每个项目都有关联菜单。如果我只是按住项目并使用它,它没有被选中,我会出错。如果我第一次选择项目并使用它,一切都正常。如何选择项目按住手势

              <DataTemplate>
                <Grid Margin="0,5">
                  <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                  </Grid.ColumnDefinitions>
                  <toolkit:ContextMenuService.ContextMenu>
                    <toolkit:ContextMenu IsEnabled="{Binding uid, Converter={StaticResource CanDelete}}"  IsZoomEnabled="True" x:Name="databoundMenu">
                      <toolkit:MenuItem Header="Удалить"  Click="deleteComment"/>
                    </toolkit:ContextMenu>
                  </toolkit:ContextMenuService.ContextMenu>
.....
                </Grid>
              </DataTemplate>

由于明显的原因,ContextMenuService不会调用SelectionChanged事件,也不会设置SelectedItem,因为这意味着带有“Remove”等选项的ContextMenus会出现故障

我认为您的问题在于,在对SelectedItem进行操作之前,您没有检查SelectedItem是否已设置


相反,在对SelectedItem进行任何操作之前,您应该验证它是否不为null。

您需要向上遍历VisualTree,以获取列表框中的FrameworkELement。这应该在单击处理程序中完成

private void deleteComment(object sender, RoutedEventArgs e)
{
    var menuItem = sender as MenuItem;
    var fe =VisualTreeHelper.GetParent(menuItem) as FrameworkElement;
    var comment = fe.DataContext as Comments;
    // deleteComment

}

if(it==null)返回但如果用户没有选择任何项目,只需按住它,项目始终为空是,这应该是预期的行为?使用长按打开上下文菜单不应选择该项。这是一次普通的投票,为什么要投反对票?这对我有用!我会帮你调平的。
private void deleteComment(object sender, RoutedEventArgs e)
{
    var menuItem = sender as MenuItem;
    var fe =VisualTreeHelper.GetParent(menuItem) as FrameworkElement;
    var comment = fe.DataContext as Comments;
    // deleteComment

}