コマンドとコントロールについて

プレゼンテーションからのロジックの分離は、Windows リボン フレームワークのコマンド プレゼンテーション システムを刺激する設計理念です。これは、この機能を公開するコントロールとは別に機能と動作が実装されるデザイン パターンに基づくシステムです。

はじめに

この記事では、リボン フレームワーク コマンド システムの設計について説明します。 コマンドとコントロールの概念について説明し、それらが連携して、新しい UI 機能のホストで豊富なコマンド エクスペリエンスを提供する方法について説明します。

Windows リボン コマンド システム

リボン フレームワークでは、コマンドとコントロールは独立したエンティティです。 Command は、特定のタスクまたは機能クラスを表す、プレゼンテーションの制約のない抽象構造です。 一方、コントロールは、リボン UI を介してコマンド機能を公開する具象オブジェクトです。

この違いにより、UI の詳細を含まないコマンドを定義し、アクションの呼び出し方法を管理しなくてもアクションの意図で実行できます。

コントロール

コントロールは、Command プレゼンテーションに必要な UI オブジェクトです。 これらは、ユーザー操作と固有のプロパティと動作のセットに基づいて、フレームワークによって実行時にレンダリングおよび管理されます。

アダプティブ レイアウトと呼ばれるフレームワークで管理される UI の柔軟性は、リボンの優れた長所の 1 つです。 リボン コントロールは、1 行のプレゼンテーション コードを記述することなく、さまざまな実行時要件に対応できるフレームワークに依存するレイアウト テンプレートまたは開発者が定義したレイアウト テンプレートを使用して自動的に再構成できます。 詳細については、「 サイズ定義とスケーリング ポリシーによるリボンのカスタマイズ」を参照してください。

アダプティブ レイアウトの利点に加えて、多くの複雑なリボン コントロールは、特定の UI 問題スペースに対して自己完結型のソリューションを提供します。 高度な相互作用モデルを提供することで、FontControl や ColorPicker などのリボン コントロールは、標準の Windows コントロールのさまざまなサブコントロール、列挙体、インデックス値ではなく、実際のフォント属性または色属性のプロパティ バッグを使用して、より抽象的な用語でデータを操作する機能を提供します。

コマンド

機能を公開するリボン コントロールと疎結合された Command 実装は、ホスト アプリケーションのドメインであり、イベント リスナー、コマンド ハンドラー、およびさまざまな Command プロパティの形式をとります。

コマンドは、リボン マークアップで一意の ID で宣言されるか、コンパイル時にマークアップ コンパイラによって生成された ID が割り当てられます。 コマンドはコマンド名を使用してコントロールに関連付けられますが、コントロールとは異なり、実際の機能は、コマンド ID を介して特定のコマンド ハンドラーにバインドされるコードで定義されます。

注意

コンパイル時に、この ID は、リボン ホスト アプリケーション内の対応するコマンド ハンドラーにコマンドを公開する ID 定義ヘッダー ファイルに格納されます。

 

各コマンドには、基になる Command 型が UI_COMMANDTYPE 列挙で項目化されています。

操作中のコマンド エクスペリエンス

このコマンド モデルの機能は、リボン クイック アクセス ツール バー (QAT) によって示されています。 QAT を使用すると、エンド ユーザーはリボン UI のほぼすべてのコントロールに対して独自のショートカットを簡単に定義できます。 ユーザーがリボン コントロールを右クリックし、コンテキスト メニューから [ クイック アクセス ツール バーに追加 ] を選択すると、実行時にショートカットが QAT に動的に追加されます。

次の図は、Windows 7 ペイントのリボンにある SplitButton コントロールで表される [コマンドから貼り付けおよび貼り付け] を示しています。

Microsoft ペイント リボンの貼り付け分割ボタンの画像。

次の図は、Windows 7 Paint のリボン QAT の SplitButton コントロールで引き続き表される同じ [コマンドからの貼り付けと貼り付け] を示しています。

Microsoft ペイント qat の貼り付け分割ボタンの画像。

コントロールが QAT によってホストされている場合、コントロールの新しいインスタンスは、追加のイベント リスナーとコマンド ハンドラーがサポートされる必要なく、元のコントロールのすべての機能を維持します。 どちらのコントロールも、共有コマンド識別子を介して同じリボン コマンド ハンドラーにバインドされます。 このようにして、フレームワークは、どちらのコントロールが呼び出されても、両方のコントロールを 1 つとして扱います。

注意

コマンドがデザイン時に ContextPopup に組み込まれると、同じ利点が実現されます。 この場合、 SplitButton コントロールがリボン、QAT、 または ContextPopup のいずれに表示されるかに関係なく、貼り付けコマンド ハンドラーを使用できます。

 

Windows リボン フレームワークの概要

リボン アプリケーションの作成

リボン マークアップを使用してコマンドとコントロールを宣言する