我有一个UI,它是一个diagramSurface对象。 在运行应用程序时,我将一个元素(一种标签)拖放到它上面。 我想为这个对象实现一个CONTEXTMENU。
我已经完成了这个
<DiagramSurface>
<DiagramSurface.ContextMenu>
<ContextMenu >
<MenuItem Header="Save" Click="MenuItem_Click"/>
</ContextMenu>
<DiagramSurface.ContextMenu>
</DiagramSurface>
通过这样做,我可以看到contextMenu,如果我点击对象不存在的表面。 怎么避免这个?我想只在右侧单击元素时显示上下文菜单。
答案 0 :(得分:0)
正如@Viv所说(虽然我不确定他为什么不在答案中说出来),当您右键单击控件上的 时,ContextMenu
会出现你把它添加到。因此,如果将其添加到DiagramSurface
,则会在单击该控件上的任何位置时显示。要解决您的问题,请从DiagramSurface
控件中删除声明。
现在,您需要将其添加到拖放的控件中。您可以像@Viv所说的那样在ContextMenu
部分中定义Resources
:
<Application.Resources>
<ContextMenu x:Key="ContextMenu">
<MenuItem Header="Save" Click="MenuItem_Click"/>
</ContextMenu>
</Application.Resources>
然后将其设置为代码中的拖放元素的ContextMenu
:
ContextMenu menu = (ContextMenu)Application.Current.FindResource("ContextMenu");
element.ContextMenu = contextMenu;