我正在开发一个类似于Maya的HyperGraph的节点图形视图,在该视图中,我可以通过拖放来连接节点。因为目标节点可以有多个输入,所以我想创建一个临时ContextMenu来选择输入,如以下模型所示:
http://www.pixtur.org/images/uploaded/0000/0696/large.jpg
我尝试了相当长的时间来触发上下文菜单的创建或打开。看起来Win32 TrackPopupMenu做得很粗略,这正是我想要的。是否存在WPF / C#等效项?
感谢像素
发布于 2010-11-27 02:59:08
我使用以下代码将上下文菜单附加到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引用了我创建的contextmenu实例,您也可以在鼠标事件处理程序中创建ContextMenu。我不确定这是否有帮助,因为我不知道你是如何做拖放的,但值得一试
发布于 2011-01-09 00:27:54
我会提出另一种解决方案:
在这个例子中,一个按钮将弹出一个上下文菜单,右击一个条目("Copy")。如果单击"Copy“上下文菜单项,则会生成控制台输出。
[..]
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;
}https://stackoverflow.com/questions/4280893
复制相似问题