【问题标题】:Context menu selected item wp7上下文菜单选择的项目 wp7
【发布时间】:2013-03-06 16:43:36
【问题描述】:

我有一个列表框。每个项目都有上下文菜单。如果我只是按住项目并使用它,它没有被选中并且我得到错误。如果我为第一个选择项目而不是工作,一切都很好。我如何选择项目保持手势?

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

【问题讨论】:

    标签: c# silverlight xaml windows-phone-7 contextmenu


    【解决方案1】:

    ContextMenuService 出于显而易见的原因,不会调用 SelectionChanged 事件,也不会设置 SelectedItem,因为这意味着带有“删除”等选项的 ContextMenus 会出错。

    认为是你的问题是你没有在做工作之前检查 SelectedItem 是否真的被设置了。

    相反,您应该先验证 SelectedItem 不为空,然后再对其进行任何操作。

    【讨论】:

    • if (it == null) return; 但是如果用户没有选择任何项目,则只能按住它,项目始终为空
    • 是的,这应该是预期的行为?使用长按打开上下文菜单不应选择该项目。这是一个普通的水龙头。
    【解决方案2】:

    您需要遍历 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
    
    }
    

    【讨论】:

    • 为什么投反对票?这对我有用!我会帮你搞定的。
    猜你喜欢
    • 2023-03-14
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多