我一直在用c#工作一段时间但令人惊讶的是我以前从未处理过上下文菜单。我的通用Windows 8.1应用程序中有一个listView控件。现在我正在尝试为listView中的每个项目弹出一个上下文菜单(它们都是相同类型的对象,并在用户添加条目时添加到列表中)。我遇到了几个问题并查看了代码示例,它们似乎在不同方向上处于领先地位。首先,当我右键单击列表中的某个项目时,它不会触发ListView_RightTapped事件。
<ListView x:Name="lstvwHours" HorizontalAlignment="Left" Height="264" Margin="427,77,0,0" VerticalAlignment="Top" Width="357" RightTapped="lstvwHours_RightTapped">
其次在Microsoft的上下文菜单代码示例中,他们说要使用PopupMenu类,但在其他代码中,我看到它编码到XAML中。
最后,在单击一个上下文菜单按钮后,我希望它触发一个删除方法。 private async void lstvwHours_RightTapped(object sender,
RightTappedRoutedEventArgs e)
{
var menu = new PopupMenu();
menu.Commands.Add(new UICommand("Delete"/*do I put the method to call here?*/));
var chosenCommand = await menu.ShowForSelectionAsync(GetElementRect((FrameworkElement)sender));
}
答案 0 :(得分:1)
这是一个例子。
在这种情况下,您可以将从您的menuitem调用的命令连接到您的视图模型。
<ListView>
<ListViewItem Content="One">
<ListViewItem.ContextMenu>
<ContextMenu>
<MenuItem Header="Insert"
Command="{Binding DataContext.InsertQuery, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"/>
<MenuItem Header="Delete"
Command="{Binding DataContext.DeleteQuery, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"/>
</ContextMenu>
</ListViewItem.ContextMenu>
</ListViewItem>
</ListView>