首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WPF中创建有关拖动完成的上下文菜单

在WPF中创建有关拖动完成的上下文菜单
EN

Stack Overflow用户
提问于 2010-11-26 05:15:21
回答 2查看 1.7K关注 0票数 2

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

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

我尝试了相当长的时间来触发上下文菜单的创建或打开。看起来Win32 TrackPopupMenu做得很粗略,这正是我想要的。是否存在WPF / C#等效项?

感谢像素

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-27 02:59:08

我使用以下代码将上下文菜单附加到listview gricolumn标头:

代码语言:javascript
复制
<ListView ... MouseUp="ListView_MouseUp">

在代码背后,我设置了鼠标事件列表的ContextMenu属性,以显示上下文菜单:

代码语言:javascript
复制
    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引用了我创建的contextmenu实例,您也可以在鼠标事件处理程序中创建ContextMenu。我不确定这是否有帮助,因为我不知道你是如何做拖放的,但值得一试

票数 0
EN

Stack Overflow用户

发布于 2011-01-09 00:27:54

我会提出另一种解决方案:

在这个例子中,一个按钮将弹出一个上下文菜单,右击一个条目("Copy")。如果单击"Copy“上下文菜单项,则会生成控制台输出。

代码语言:javascript
复制
[..]
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4280893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档