動作サービスの概要

BehaviorService はデザイナーのユーザー インターフェイスを管理します。 これにより、マウス関連のイベント、メニュー コマンド、OLE ドラッグ アンド ドロップ操作など、デザイン時のユーザー インターフェイス要素の操作が統一されます。

デザイン時のユーザー インターフェイスの管理

カスタムのデザイン時の操作を作成する際には、ユーザー インターフェイスの管理が重要です。 カスタム コントロールにデザイン時の操作を提供するには、カスタム デザイナーを作成します。

デザイナーの開発者は、adorners という名前の独自のユーザー インターフェイス レイヤーを作成します。 各レイヤーでは、描画、ドラッグなどの UI 操作用に、独自の Glyph 型を作成します。 各 Glyph には、関連付けられている Behavior 型があります。 Behavior は、メニュー コマンド、マウスの動作、OLE ドラッグ アンド ドロップ操作など、すべてのユーザー入力のオーバーロードを持つクラスです。 また、Behavior オブジェクトを Glyph オブジェクトとは別に追加して、デザイナー全体の一般的なユーザー入力にフックできます。 上記の 3 つの機能はいずれも、Behavior 型で実装されます。

注意

デザイン時アセンブリ System.Design.dll への参照を追加する必要があります。このアセンブリは、.NET Framework 4 Client Profile には含まれていません。System.Design.dll への参照を追加するには、プロジェクトのターゲット フレームワークを .NET Framework 4 に変更する必要があります。

.NET Framework バージョン 1.1 では、OnMouseDragBegin などの一部のイベントは ControlDesigner クラスによって公開されていました。 このモデルでは、UI デザイナーのロジックの大部分が EventHandler で実装されます。 ユーザーが操作するコントロール上にはいくつかの異なる領域が存在するため、このモデルではサポートのための多数のロジックを記述する必要がありました。

Behavior 型では、このような状況が解決されます。 BehaviorService は 2 つの部分から構成されます。 それぞれの要素の説明を次の表に示します。

指定項目

Description

Behavior クラスのスタック

各クラスには、メニュー コマンド、OLE ドラッグ アンド ドロップ操作、マウス イベントなどに関連するメソッドがあります。 スタックの先頭のクラスがアクティブな Behavior であり、すべてのユーザー入力はこの Behavior を経由します。

Adorner オブジェクトおよび Glyph オブジェクト

Adorner は、デザイン サーフェイスとユーザーの間にある非表示のレイヤーです。 Adorner には Glyph オブジェクトを含めることができます。このオブジェクトは軽量のレンダリングされたオブジェクトです。 Glyph は、動作サービスによるヒット テストを受けることができます。このヒット テストから true が報告される限り、アクティブな BehaviorBehavior オブジェクトであり、Glyph はオプションでこのオブジェクトを公開できます。

Windows フォーム デザイナーでは、ドラッグおよびマウスの移動に対してオリジナルの ControlDesigner のオーバーライドが引き続きサポートされていますが、これらのアクションは Behavior オブジェクトとして実装されています。 ドラッグ ハンドルの標準的なセットを持つ単純なコントロールのデザイナー内の要素を次の表に示します。

Behavior の要素

Description

選択 Adorner

Adorner の単一のレイヤーがすべての選択 UI Glyph オブジェクトを処理します。

本体 Glyph

完全に透過的な本体 Glyph がコントロールの先頭にあります。 この動作がすべてのマウス操作を処理します。

グラブ Glyph

グラブ Glyph オブジェクトは、コントロールのグラブ ハンドルを描画します。 これらの Behavior オブジェクトがドラッグ操作を制御します。

デザイン時のユーザー インターフェイスの拡張

BehaviorService モデルを使用すると、新機能を既存のユーザー インターフェイス上に簡単にレイヤーとして配置できます。 新しい UI は、前に定義した他の Glyph および Behavior オブジェクトとは無関係なままです。 たとえば、一部のコントロール上のスマート タグへは、コントロール (スマート タグ グリフ) の右上隅にある Glyph でアクセスします。

スマート タグ コードは独自の Adorner レイヤーを作成し、このレイヤーに Glyph オブジェクトを追加します。 これにより、スマート タグ Glyph オブジェクトは、選択 Glyph オブジェクトから切り離された状態を維持します。 新しい AdornerAdorners コレクションに追加するのに必要なコードは簡単です。

    behaviorService = (BehaviorService)serviceProvider.GetService(typeof(BehaviorService));
    designerActionAdorner = new Adorner();
    behaviorService.Adorners.Add(designerActionAdorner);
    Glyph dag = new DesignerActionGlyph(/*...*/);
    designerActionAdorner.Glyphs.Add(dag);

Glyph と Behavior

Glyph 型は単純です。 複雑な機能が必要な場合は、Glyph から派生した独自のクラスに追加します。

Glyph オブジェクトには Behavior オブジェクトが含まれている場合がありますが、必須ではありません。 Behavior オブジェクトのない Glyph には、null を返す Behavior プロパティがあります。

Behavior には、サポートされているユーザーの対応ごとにメソッドがあります。 たとえば、基本 Behavior クラスには、ドラッグ アンド ドロップ操作をサポートする OnDragEnterOnGiveFeedback などのメソッドがあります。

大部分のメソッドは、イベントが処理されたかどうかを示すブール値を返します。 ドラッグ イベントには、DragEventArgs パラメーター内に値があります。 FindCommand メソッドからメニュー項目を返して、それを個別に追加または削除できます。 FindCommand メソッドは DisableAllCommands プロパティと連動して、MenuCommand オブジェクトと動作との対話方法を指定します。

Adorner

Adorner は、Glyph オブジェクトから成るユーザー インターフェイス関連要素と BehaviorService の間のプロキシと見なすことができます。

Adorner は有効または無効にできます。 有効にされた Adorner オブジェクトのみが BehaviorService からヒット テストおよび描画メッセージを受け取ります。

BehaviorServiceBehaviorServiceAdornerCollectionAdorner を追加すると、コレクションは AdornerBehaviorService をコールバックできるように BehaviorService プロパティを設定します。

Adorner オブジェクトの Invalidate メソッドを呼び出すと、関連付けられている BehaviorService によって Adorner ウィンドウが更新されます。

動作のプッシュ

Behavior オブジェクトを動作スタックに追加するには、Glyph オブジェクトを使用するのが最も簡単な方法です。ただし、他にも方法があります。 Glyph オブジェクト自体が動作スタックの Behavior オブジェクトをプッシュできます。また、Behavior オブジェクトを動作スタックに直接プッシュすることもできます。 デザイン サーフェイス上でグラブ ハンドルをドラッグする場合について考えます。 ドラッグを追跡するロジックを記述する代わりに、Glyph 自体が動作スタックを使用して次のアクションを順に実行します。

  1. Glyph には、マウスをクリックする動作に応答する Behavior が関連付けられています。

  2. マウス ボタンが押されると、Glyph は新しい Behavior を動作スタックにプッシュします。 この Behavior は、mouse-move イベントおよび mouse-up イベントを処理します。 また、すべてのメニュー コマンドを無効にして、ドラッグ中にはキーボード ショートカットや他のコマンドを実行できないようにします。

  3. マウス ボタンを離すと、Behavior は移動の動作を終了し、動作スタックからポップされます。 これにより、前の Behavior が自動的に復元されます。

注意

BehaviorService アーキテクチャは Windows フォーム モデルに結び付けられているため、Web フォームなどの他の表示テクノロジはサポートしていません。

参照

関連項目

BehaviorService

Glyph

Adorner

EventHandler

その他の技術情報

デザイン時サポートの拡張