ユーザー入力とプレゼンテーション アーキテクチャ
デザイナーを構築するときには、ユーザー入力に関して解決しなければならない問題がいくつかあります。 たとえば、要素フォーカスの制御、マウス入力およびキーボード入力のルーティング、装飾の追加、コマンドの呼び出しなどは、いずれも共通の一元的なユーザー入力処理メカニズムを必要とします。 WPF Designer for Visual Studio の DesignerView クラスは、これらすべての問題に対処し、プライマリ デザイン サーフェイスを表すクラスです。
Adorner
装飾は、デザイン ビューだけに表示されるビジュアル要素であり、デザイン プロセスを支援する役割を果たします。 装飾の例として、選択したコントロールの周囲に表示されるサイズ変更ハンドルがあります。 DesignerView クラスには Adorners コレクションがあり、ここに装飾を追加し、デザイン ビューで使用することができます。 装飾の詳細については、「装飾アーキテクチャ」を参照してください。
入力のルーティング
DesignerView クラスは、標準の一元的なユーザー入力ルーティング方法を提供します。 入力プロセスの一般的な手順を次に示します。
入力イベントの発生
ヒット テストの実行
入力バインディングの検索
コマンド バインディングの実行
これらの手順の詳細については以降のセクションで説明します。
入力イベントの発生
入力イベントが発生すると、そのイベントは DesignerView クラスにルーティングされ、ヒット テストが実行されます。
ヒット テストの実行
入力イベントが DesignerView のインスタンスに到着すると、ヒット テストが実行されます。 ヒット テストでは、装飾層とオブジェクト階層構造のスキャンによってビジュアル要素が検出され、次の情報が返されます。
マウスが置かれている装飾
装飾が関連付けられているモデル アイテム
マウスが置かれているビジュアル要素 (装飾でない場合)
ビジュアル要素が関連付けられているモデル アイテム
入力バインディングの検索
ヒット テストが完了すると、DesignerView は入力イベントに対応する入力バインディングを検索します。 入力バインディングの検索に使用されるアルゴリズムは、デザイナーの現在の状態によって異なります。
現在アクティブなツールにアクティブなタスクがある場合は、そのタスクの入力バインディングだけが入力イベントに対応するバインディングの検索対象となります。
マウス入力の場合、DesignerView はヒット テストを実行した装飾を調べ、入力イベントに対応する入力バインディングを含むタスクを検索します。 キャプチャが行われた場合は、キャプチャの実行時にヒット テストが行われた装飾が使用されます。 ヒット テストが実行された装飾がない場合、DesignerView はアクティブなツールに含まれるタスクの入力バインディングを調べます。
キーボード入力の場合、DesignerView はアクティブなツールに含まれるタスクの入力バインディングを調べます。 装飾のキーボード入力バインディングは無視されます。
注意
マウス入力用の修飾子キーは無視されません。 マウス入力では修飾子キーが有効です。
コマンド バインディングの実行
入力バインディングを取得すると、そのバインディングのコマンドに対して Execute メソッドが呼び出されます。 ただし、コマンドはインターフェイスであるため、Execute の動作はコマンドの実装によって異なります。