我有一个矩形。rectangle
有一个自定义的contextmenu
(只是在ControlTemplae
的<ContextMenu.Template>
内进行了一些简单的更改)。我想要的是,在鼠标左键单击时,会弹出contextmenu
。
我尝试在矩形的rectangle1.contextmenu.isopen=true
事件中添加MouseDown
。是的,它打开了contextmenu
。但是,contextmenu
设置为在矩形的上方(顶部)打开/弹出,我只是简单地做到了在矩形的XAML中添加ContextMenuService.Placement="top"
。但是,如果我在矩形的rectangle1.contextmenu.isopen=true
事件中使用MouseDown
,则会弹出contextmenu
,但在错误的位置,它不再停留在顶部,而是紧随其后鼠标如果我单击矩形的右上角,contextmenu
将在右侧打开/弹出。此行为非常奇怪,我不知道为什么会这样。
无论如何,如何单击鼠标左键打开矩形顶部的contextmenu
?
更新
奇怪的是,无论我将任何代码添加到任何mouseevent
中,上下文菜单都将丢失其位置!例如,如果我什至在mouseDown事件上添加MsgBox("abc")
,然后右键单击矩形,则上下文菜单不在顶部!
最佳答案
从MSDN参考ContextMenu.Placement中可以看到
将ContextMenu分配给FrameworkElement.ContextMenu时
或FrameworkContentElement.ContextMenu属性,
ContextMenuService在以下情况下更改此属性的此值:
ContextMenu打开。如果用户使用以下命令打开ContextMenu
鼠标,放置位置设置为MousePoint。如果用户打开
通过使用键盘的ContextMenu,将Placement设置为Center。如果你
要更改ContextMenu的位置,请设置
FrameworkElement上的ContextMenuService.Placement属性或
FrameworkContentElement。
因此,由于您不是通过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;
}
关于c# - 打开鼠标左键单击上下文菜单WPF C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48991392/