/ / Flex: Benutzerdefiniertes Kontextmenü für eine Komponente - flex, flex4

Flex: Benutzerdefiniertes Kontextmenü für eine Komponente - flex, flex4

Ich habe eine Flex-Anwendung, die mit Flash Player und nicht mit AIR läuft und eine Tree Ich möchte ein benutzerdefiniertes Kontextmenü erstellen.

Ich habe es gerade versucht <mx:Tree ... contextMenu="{MyClassWithStatic.menu}">, aber das hat nichts getan.

Ging zu suchen, und fand dieses Zitat aus einigen Adobe-Dokumenten irgendwo

In Flex oder Flash Builder nur auf oberster EbeneKomponenten in der Anwendung können Kontextmenüs haben. Wenn beispielsweise ein DataGrid-Steuerelement ein Kind eines TabNavigator- oder VBox-Containers ist, kann das DataGrid-Steuerelement kein eigenes Kontextmenü haben.

Ich ging also nach oben und probierte jedes Elternelement aus, bis ich mein Kind erreichte <Application>-Element, das mit dem übereinstimmt, was sie geschrieben haben.

Ich habe versucht, eine Flex-Komponente zu erstellen, basierend auf der Gruppe (der Standard), die meine Struktur enthielt, und dem Kontextmenü auf der obersten Ebene dort, in der Hoffnung, es würde funktionieren, aber ohne Erfolg.

Gibt es einen anderen Weg, dies zu bewältigen, den ich noch nicht gefunden habe?

Der Code, mit dem ich das Menü erstelle:

var menuItems:Array = [];
var rename:ContextMenuItem = new ContextMenuItem("Rename");
rename.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, renameSelectedHandler);
menuItems.push(rename);
menu.customItems = menuItems;
menu.hideBuiltInItems();

Antworten:

2 für die Antwort № 1

Du hast recht, das Kontextmenü funktioniert nur obenLevel-Komponenten. Es ist eine Einschränkung von Flex, die lästig ist und sollte nicht in erster Linie da sein. Es gibt nicht viel, was Sie tun können, da es keine Möglichkeit gibt, das Ereignis festzuhalten, sondern nur einige Javascript-Tricks, aber selbst dann sagt es Ihnen nicht, wo Sie geklickt haben.

Wenn ich du wäre, würde ich einfach das Konzept vergessen und weg von Rechtsklick insgesamt wenn möglich.


0 für die Antwort № 2

Ich kann nicht sicher sein, da der ganze Code nicht da ist. Aber du scheinst deine eigene Forschung ignoriert zu haben. Verwenden Sie nicht Ihre neue Komponente oder irgendetwas, das Ihren Baum enthält. Dann kleben Sie den Baum einfach in Ihre Anwendung.

Ich erinnere mich auch daran, dass TreeItemRenderer nicht derselbe wie in anderen UI-Komponenten ist. Vielleicht testen Sie zuerst Ihren "Menü" -Code mit einem Datagrid und stellen Sie sicher, dass es funktioniert. Viel Glück


0 für die Antwort № 3

Ich habe es nicht selbst versucht, aber nachdem ich die Kommentare gelesen hatte http://michael.omnicypher.com/2007/02/flex-trees-with-context-menu_14.html Es sieht so aus, als könnten Sie dem Elementrenderer des Baums ein Kontextmenü hinzufügen.

Der Artikel und Kommentare unter http://blog.arc90.com/2008/04/21/adding-a-contextmenu-to-a-flex-tree/ sind auch einen Blick wert.