2011-07-28 67 views
1

我有一个ListBox。每个项目都有上下文菜单。如果我只是坚持项目,并使用它,它没有被选中,我得到错误。如果我为第一个选择项目,而不是工作,一切都ok。如何我可以选择保持手势项目?上下文菜单选定项wp7

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

C#

var it = this.comm_box.SelectedItem as Comments; 

回答

1

的ContextMenuService出于显而易见的原因,没有调用SelectionChanged事件,并没有设置的SelectedItem,因为这将意味着ContextMenus与选项,如“删除”会出错。

什么我认为是你的问题是,你没有检查SelectedItem是否实际设置,在做它的工作之前。

相反,您应该在使用它之前验证SelectedItem不为null。

+0

'如果(它== NULL) 回报;' 但是,如果用户不选择任何项目,只有坚持一下吧,总项目空 – SevenDays

+0

是的,这应该是预期的行为?使用长按打开一个上下文菜单不应该选择该项目。这是一个常规的水龙头。 –

1

你需要沿着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 

} 
+0

这工作,我验证了它。 – terphi

+0

为什么要投票?这对我有用!我会把它调平到雅。 –