UIElements には以下の標準コントロールが組み込まれています。
Contextual menus can present a set of choices or actions to the user, depending on the context. This context is usually the current selection, but the context can be anything.
ここでは、コンテキストメニューを追加する方法を示し、コールバックを説明し、ユーザーの選択に応答する方法を説明します。
コンテキストメニューを使用可能にするには、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)
{
// ...
}
The callback given to the ContextualMenuManipulator
constructor will be invoked last to allow children elements to populate the menu.
内部的に、マニピュレーターは、伝播パスに沿って、ターゲット要素階層に伝播される ContextualMenuPopulateEvent
イベントを送信します。つまり、ビジュアルツリーのルートからイベントターゲットに、次にビジュアルツリーをルートにバックアップします。伝播パスに沿って、 ContextualMenuPopulateEvent
イベントのコールバックを持つ要素は、コンテキストメニューの項目を追加、削除、または変更できます。
要素が ContextualMenuPopulateEvent
を受け取ると、DropdownMenu.InsertAction()
か DropdownMenu.AppendAction()
のいずれかを呼び出すことによって、メニュー項目をコンテキストメニューに加えます。
これらの関数はそれぞれ、パラメーターとして 2 つのコールバックをとります。最初のコールバックは、ユーザーがメニューの項目を選択したときに実行されます。2 番目のコールバックは、メニューを表示する前に実行されます。また、2 番目のコールバックはメニュー項目が有効かどうかをチェックします。
それらのコールバックは両方とも MenuAction
をパラメーターとして受け取ります。MenuAction
はメニュー項目を表し、以下のような便利なプロパティーを持ちます。
MenuAction.userData
には、AppendAction()
や InsertAction()
によって使用された可能性のあるユーザーデータへの参照が含まれます。MenuAction.eventInfo
には、コンテキストメニューの表示をトリガーしたイベントに関する情報が含まれます。イベントへ応答するアクションの MenuAction.eventInfo
を使用してください。例えば、マウスの位置を使用して、選択したコンテキストメニュー項目に基づいて、オブジェクトを作成し配置することができます。