UIElements には以下の標準コントロールが組み込まれています。
コンテキストメニューコントロールは、コンテキストに応じて一揃いの選択肢やアクションを表示する標準的なコントロールです。通常、このコンテキストは現在選択されているものですが、コンテキストは何でも構いません。
ここでは、コンテキストメニューを追加する方法を示し、コールバックを説明し、ユーザーの選択に応答する方法を説明します。
コンテキストメニューを表示するには、コンテキストメニューを発生させるイベントのコールバックで ContextualMenuManager.DisplayMenu()
を呼び出します。
例えば、マウスの右ボタンを離したときにコンテキストメニューを表示するには、OnMouseUpEvent
のコールバックに以下のコードを追加します。
// VisualElement サブクラスで
void OnMouseUpEvent(MouseUpEvent evt)
{
if (elementPanel == null || elementPanel.contextualMenuManager == null)
return;
if (evt.button != MouseButton.RightMouse || evt.modifiers != EventModifiers.None)
return;
elementPanel.contextualMenuManager.DisplayMenu(evt, this);
evt.StopPropagation();
evt.PreventDefault();
}
上の例では、ContextualMenuManager.DisplayMenu()
は DisplayMenu()
の 2 番目の引数として ContextualMenuPopulateEvent
イベントターゲットを送信します。このイベントは、ビジュアルツリーのルートから伝播経路に沿ってビジュアル要素ツリーに伝播されます。ビジュアルツリーのルートからイベントターゲットまで、次に、ビジュアルツリーをルートへと上昇します。伝播経路に沿って、ContextualMenuPopulateEvent
イベントのコールバックを持つ要素は、コンテキストメニューの項目を追加、削除、変更することができます。
上の例は、StopPropagation
の使い方と PreventDefault()
で要素が表示されないようにする方法も示しています。
コンテキストメニューを追加するには、ContextualMenuManipulator
をビジュアル要素にアタッチします。このマニピュレーターは、右ボタンの Mouse Up イベントかメニューの Key Up イベントのいずれかの後にコンテキストメニューを表示するコールバックを加えます。ContextualMenuManipulator
マニピュレーターは ContextualMenuPopulateEvent
に応答するコールバックも追加します。
このインストールされたコールバックはまた、デリゲートを呼び出してコンテキストメニューを生成します。デリゲートは、マニピュレーターをインスタンス化するときに必要です。次のコード例は、これを行う方法を示しています。
void InstallManipulator(VisualElement element)
{
ContextualMenuManipulator m = new ContextualMenuManipulator(MyDelegate);
m.target = element;
}
void MyDelegate(ContextualMenuPopulateEvent event)
{
// event.menu を変更
event.menu.AppendAction("Properties", DisplayProperties, DropdownMenu.MenuAction.AlwaysEnabled);
}
void DisplayProperties(DropdownMenu.MenuAction menuItem)
{
// ...
}
要素が ContextualMenuPopulateEvent
を受け取ると、DropdownMenu.InsertAction()
か DropdownMenu.AppendAction()
のいずれかを呼び出すことによって、メニュー項目をコンテキストメニューに加えます。
これらの関数はそれぞれ、パラメーターとして 2 つのコールバックをとります。最初のコールバックは、ユーザーがメニューの項目を選択したときに実行されます。2 番目のコールバックは、メニューを表示する前に実行されます。また、2 番目のコールバックはメニュー項目が有効かどうかをチェックします。
それらのコールバックは両方とも MenuAction
をパラメーターとして受け取ります。MenuAction
はメニュー項目を表し、以下のような便利なプロパティを持ちます。
MenuAction.userData
には、AppendAction()
や InsertAction()
によって使用された可能性のあるユーザーデータへの参照が含まれます。MenuAction.eventInfo
には、コンテキストメニューの表示をトリガーしたイベントに関する情報が含まれます。イベントへ応答するアクションの MenuAction.eventInfo
を使用してください。例えば、マウスの位置を使用して、選択したコンテキストメニュー項目に基づいて、オブジェクトを作成し配置することができます。Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.