我需要打开一个菜单,由于 WP7 未设计
来执行此类操作,因此我正在借助 Toolkit。以下是示例代码:
<Border BorderThickness="3" Padding="6">
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="item1" Click="Item1_Click" />
<toolkit:MenuItem Header="item2" Click="Item2_Click" />
<toolkit:MenuItem Header="item3" Click="Item3_Click" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<TextBlock Text="Tap" />
</Border>
现在,只要用户执行按住操作,它就可以正常工作。但我不能要求用户执行此类操作。我需要通过单击/点击/触摸/手势(无论您想调用它)来显示菜单。有人可以建议吗?如果您认为工具包不是最好的方法,请使用示例代码建议替代方案。我尝试了弹出窗口,但这对我的应用程序来说弊大于利
最佳答案
您可以将 GestureListener
添加到 Border
并订阅 Tap
事件。在事件处理程序中,您获取 Border
的 ContextMenu
,如果它没有逻辑父级,则将 IsOpen
设置为 true。
<Border BorderThickness="3" Padding="6">
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener Tap="GestureListener_Tap" />
</toolkit:GestureService.GestureListener>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="item1" Click="Item1_Click" />
<toolkit:MenuItem Header="item2" Click="Item2_Click" />
<toolkit:MenuItem Header="item3" Click="Item3_Click" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<TextBlock Text="Tap" />
</Border>
private void GestureListener_Tap(object sender, GestureEventArgs e)
{
Border border = sender as Border;
ContextMenu contextMenu = ContextMenuService.GetContextMenu(border);
if (contextMenu.Parent == null)
{
contextMenu.IsOpen = true;
}
}
关于c# - 点击上下文菜单而不是点击并按住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4913087/