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
}