[英]Open contextmenu on left mouse click wpf c#
我有一个矩形。 rectangle
有一个自定义的contextmenu
(只是在<ContextMenu.Template>
的ControlTemplae
中进行的一些简单更改)。我想要的是,在鼠标左键单击时将弹出该contextmenu
<ContextMenu.Template>
。
我尝试添加rectangle1.contextmenu.isopen=true
在矩形的MouseDown
event.Yes,它打开contextmenu
。不过,该contextmenu
设置为开/矩形上方弹出(顶部),我做到了通过简单地添加ContextMenuService.Placement="top"
到矩形的XAML.But如果我使用rectangle1.contextmenu.isopen=true
在矩形的MouseDown
事件,然后将contextmenu
弹出,但在错误的地方,它不会留在上面的任何更多,而它遵循mouse.Eg如果我点击矩形的右上角,在contextmenu
打开在right.This行为/弹出很奇怪,我不知道为什么会这样。
无论如何,如何单击鼠标左键打开矩形顶部的contextmenu
?
更新
奇怪的是,无论我将任何代码添加到任何mouseevent
,上下文菜单都将丢失它的位置! 例如,如果我甚至在mouseDown事件上添加MsgBox("abc")
,然后右键单击矩形,则上下文菜单不在顶部!
从MSDN参考ContextMenu.Placement中可以看到
将ContextMenu分配给FrameworkElement.ContextMenu或FrameworkContentElement.ContextMenu属性时, 当ContextMenu打开时 , ContextMenuService会更改此属性的此值 。 如果用户使用鼠标打开ContextMenu,则Placement设置为MousePoint。 如果用户使用键盘打开ContextMenu,则Placement设置为Center。 如果要更改ContextMenu的位置,请在FrameworkElement或FrameworkContentElement上设置ContextMenuService.Placement属性。
因此,由于您不是通过ContextMenuService进行操作,因此您应该自己更改Placement和PlacementTarget。
private void Mouse_Down(object sender, MouseButtonEventArgs e)
{
var cm = ContextMenuService.GetContextMenu(sender as DependencyObject);
if (cm==null)
{
return;
}
cm.Placement = PlacementMode.Top;
cm.PlacementTarget = sender as UIElement;
cm.IsOpen = true;
}
我想这就是你要做什么?
rect.ContextMenu.PlacementTarget = rect;
rect.ContextMenu.Placement = System.Windows.Controls.Primitives.PlacementMode.Top;
rect.ContextMenu.IsOpen = true;
// if you want it to be at the top and come down over the rectangle
rect.ContextMenu.VerticalOffset = rect.ContextMenu.ActualHeight;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.