2011-02-06 54 views
12

我需要打开一个菜单,并且由于WP7是not designed来执行此类操作,我正在接受Toolkit的帮助。以下是示例代码:ContextMenu点击而不是点击并按住

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

现在,只要用户执行按住操作,此功能就可以正常工作。但我不能要求用户采取这样的行动。我需要通过单击/轻击/触摸/手势(您想调用它的水手)来显示菜单。有人可以建议吗?如果您认为工具包不是最好的方法,那么请使用示例代码建议替代方案。我试图弹出,但如果你想为你的应用程序上下文菜单,然后ContextMenuContextMenuService都接受,因为它是整个第三方和预装应用程序的标准,最好的办法是做多好不好我的应用程序了

回答

14

您可以将GestureListener添加到Border并订阅Tap事件。在事件处理程序中,如果ContextMenu没有逻辑父项,则将获得BorderContextMenu,并将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; 
    } 
} 
0

。用户已经了解了“点击并握住”手势,因此解决这个问题将会违反直觉。

如果(无论出于何种原因),则必须从单一的水龙头启动ContextMenu,那么你可以随时从Silverlight工具包定制的源代码ContextMenu.cs使代替挂钩Hold事件它挂钩Tap事件。

+0

嗨德里克,这并没有多大帮助。考虑到我对WP7和silverlight很新,我查了一下surce的代码,但是不太了解。你能帮我改变点击并按住行动只是点击? – Ravi 2011-02-06 15:25:43

+0

下载Silverlight Toolkit的源代码,打开我引用的源文件,将`.Hold + =`改为`.Tap + =`,重新编译,将项目中的引用更新为新的程序集。不过,我仍然很怀疑改变默认行为是否正确。 – 2011-02-06 19:05:54