C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

コントロールにコンテキストメニューを追加したい1

コントロールコンテキストメニュー(右クリックのメニュー)を
追加したい。最悪、出来ない様であればボタンを配置しますが、
イチイチボタンを配置するとスペースが狭くなるので避けたいのが
本音です。

コントロールそのものにコンテキストメニューを表示する機能が見当たらないので
何かを被せて行います。

探した所、GestureDetectorが該当しそうです。
GestureDetector | Flet

苦労の末、こんな感じで右クリックを拾えました。
(ドラッグ時の左クリックには反応しません)

import flet as ft

def main(page: ft.Page):
    def on_context_menu(e: ft.TapEvent):
        print("hoge")

    drag = ft.Draggable(
        group = "test",
        content = ft.Text(
            "右クリックして!",
            size = 20,
        ),
    )

    gd = ft.GestureDetector(
        mouse_cursor = ft.MouseCursor.CONTEXT_MENU,
        on_secondary_tap_up = on_context_menu,
        left = 100,
        top = 100,
        content = drag,
    )

    # page.add(gd) <-これNG
    page.add(ft.Stack([gd]))

ft.app(target=main)

GestureDetectorは、Stack内でないとエラーになりました。理由が良く分かって
いないのですが。
目的の要素はDraggableを持っている為ややこしい状態ですが、ドラッグも可能で
右クリックも拾えています。
DragTargetが無いので、ドロップできるか試していませんが、まぁ出来るでしょう。

右クリックは拾えたのですが、肝心のメニュー相当の物をどうやって表示させれば
良いものか・・・。
試しにこんな感じで、無理無理入れましたがエラーでした。

    def on_context_menu(e: ft.TapEvent):
        print("hoge")
        piyo = ft.Text("piyo")
        e.page.controls.append(
            ft.Stack(
                ft.Column(
                    controls=[piyo]
                )
            )
        )
        piyo.update()

どうすれば・・・アラートか?