2010-11-25 11 views
2

Ich arbeite an einer Knoten-Graph-Ansicht ähnlich Maya HyperGraph, in dem ich Knoten mit Drag & Drop verbinden kann. Da das Ziel-Knoten mehrere Eingänge haben, möchte ich eine temporäre ContextMenu erstellen, um die Eingabe als was darauf hindeutet, in der folgenden Mock-up wählen:Erstellen eines Kontextmenüs beim Ziehen abgeschlossen in WPF

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

ich schon eine ganze Zeit versucht, die Schaffung auszulösen oder Öffnen eines Kontextmenüs. Es sieht so aus als ob das Win32 TrackPopupMenu ungefähr funktioniert, wonach ich suche. Gibt es ein WPF/C# -Aquivalent?

Dank pixtur

Antwort

0

ich den folgenden Code verwenden, um eine contextmenu zu einem Listview gricolumn Header anhängen: Ich habe die ContextMenu Eigenschaft der Liste auf der Maus nach oben Ereignis

<ListView ... MouseUp="ListView_MouseUp"> 

In der Code-Behind, Um das Kontextmenü anzuzeigen:

Die Variable ContextMenu bezieht sich auf eine Kontextmenu-Instanz, die ich erstelle Sie können das ContextMenu auch im Mouse-Ereignishandler erstellen. Ich bin nicht sicher, ob das hilft, wie ich weiß nicht, wie Sie den Drag/Drop tun, aber es ist einen Versuch wert

+0

Hallo pivotnig, oh, das ist sehr interessant. Nach ein paar Stunden habe ich den folgenden Code ausgeführt: – pixtur

+0

[code] cv.contextMenu.Items.Clear(); foreach (Eingabeeingabe in targetOp.Inputs) { MenuItem item = new MenuItem(); item.Header = input.Name; //item.Click cv.contextMenu.Items.Add (Element); } cv.contextMenu.IsOpen = true; [/ code] In diesem Fall ist cv ein Eltern-UiElement. Allerdings kann ich jetzt keinen temporären Klick-Handler zuweisen, der auf "klicken" klickt. Sorry, aber ich formatiere Code-Snippets nicht zu kommentieren ... – pixtur

+0

danke für die Kennzeichnung der Antwort, funktioniert es jetzt für Sie? Wenn nicht und Sie jetzt ein anderes Problem haben, würde ich eine andere Frage stellen – thumbmunkeys

2

ich eine andere Lösung vorschlagen würde:

In diesem Beispiel wird eine Schaltfläche, um einen Kontext wird angehoben Menü mit einem Eintrag ("Kopieren") bei Rechtsklick. Wenn auf den Kontextmenübefehl "Kopieren" geklickt wird, wird eine Konsolenausgabe generiert.

[..] 
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; 
} 
Verwandte Themen