The following standard controls are built into UI Toolkit:
コンテキストメニューは、コンテキストに応じてユーザーに一群の選択肢やアクションを表示します。このコンテキストは何でも参照でき、通常は現在の選択を表示します。
コンテキストメニューを使用可能にするには、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)
{
// ...
}
ContextualMenuManipulator
コンストラクターに渡されるコールバックは最後に呼び出されるので、子要素をメニューに含むことができます。
内部的に、マニピュレーターは、伝播パスに沿って、ターゲット要素階層に伝播される ContextualMenuPopulateEvent
イベントを送信します。つまり、ビジュアルツリーのルートからイベントターゲットに、次にビジュアルツリーをルートにバックアップします。伝播パスに沿って、 ContextualMenuPopulateEvent
イベントのコールバックを持つ要素は、コンテキストメニューの項目を追加、削除、または変更できます。
要素が ContextualMenuPopulateEvent
を受け取ると、DropdownMenu.InsertAction()
か DropdownMenu.AppendAction()
のいずれかを呼び出すことによって、メニュー項目をコンテキストメニューに加えます。
これらの関数はそれぞれ、パラメーターとして 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.