我正在开发类似于Maya的HyperGraph的节点图视图,我可以通过拖放连接节点。因为目标节点可以有多个输入,所以我想创建一个临时的ContextMenu来选择输入作为以下模型中的建议:
http://www.pixtur.org/images/uploaded/0000/0696/large.jpg
我尝试了很长时间来触发创建或打开上下文菜单。它看起来像Win32 TrackPopupMenu大致,我正在寻找。是否有WPF / C#等价物?
由于 pixtur
答案 0 :(得分:2)
我建议另一个解决方案:
在此示例中,一个按钮将在右键单击时引发一个带有一个条目(“复制”)的上下文菜单。如果单击“复制”上下文菜单项,则会生成控制台输出。
[..]
var button = new Button();
button.Content = "SomeButtonName";
button.MouseUp += HandleMouseUp;
[..]
private void HandleMouseUp(object sender, MouseButtonEventArgs e)
{
var senderUIControl = sender as Control;
var contextMenu = new ContextMenu();
var item = new MenuItem();
item.Header = "Copy";
item.Click += (o, a) => {
Console.WriteLine("Copy item clicked");
};
contextMenu.Items.Add(item);
senderUIControl.ContextMenu = contextMenu;
}
答案 1 :(得分:0)
我使用以下代码将contextmenu附加到listview gricolumn标题:
<ListView ... MouseUp="ListView_MouseUp">
在代码隐藏中,我在鼠标向上事件中设置列表的ContextMenu
属性,以显示上下文菜单:
private void ListView_MouseUp(object sender, MouseButtonEventArgs e)
{
DependencyObject depObj = e.OriginalSource as DependencyObject;
while (depObj != null && (!(depObj is GridViewColumnHeader)))
{
depObj = VisualTreeHelper.GetParent(depObj);
}
if (depObj is GridViewColumnHeader && e.ChangedButton == MouseButton.Left)
{
((GridViewColumnHeader)depObj).ContextMenu = ContextMenu;
}
}
变量ContextMenu是指我用bfeorehand创建的contextmenu实例,您还可以在Mouse事件处理程序中创建ContextMenu。 我不确定这是否有帮助,因为我不知道你如何进行拖放,但值得一试