在WPF中完成拖动时创建上下文菜单

时间:2010-11-25 21:15:21

标签: c# wpf user-interface drag-and-drop contextmenu

我正在开发类似于Maya的HyperGraph的节点图视图,我可以通过拖放连接节点。因为目标节点可以有多个输入,所以我想创建一个临时的ContextMenu来选择输入作为以下模型中的建议:

http://www.pixtur.org/images/uploaded/0000/0696/large.jpg

我尝试了很长时间来触发创建或打开上下文菜单。它看起来像Win32 TrackPopupMenu大致,我正在寻找。是否有WPF / C#等价物?

由于 pixtur

2 个答案:

答案 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。 我不确定这是否有帮助,因为我不知道你如何进行拖放,但值得一试