我有一个列表框。每个项目都有上下文菜单。如果我只是按住项目并使用它,它没有被选中,我得到错误。如果我是第一个选择项目而不是工作,一切都好。如何我可以选择项目保持手势?
<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;
答案 0 :(得分:1)
ContextMenuService由于显而易见的原因,没有调用SelectionChanged事件,也没有设置SelectedItem,因为这意味着带有“删除”等选项的ContextMenus会出错。
我认为的问题在于,在对其进行处理之前,您没有检查是否实际设置了SelectedItem。
相反,您应该在使用它之前验证SelectedItem不为null。
答案 1 :(得分:1)
您需要前往VisualTree以获取ListBox中的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
}