カスタム プロパティ、イベント、およびコントロール パターンを設計する

カスタム プロパティ、イベント、またはコントロール パターンの設計は、さまざまなコントロール実装で役立つ必要があります。 限られたシナリオでのみ役立つコントロールまたはアプリケーション固有の設計は避ける必要があります。 設計は、さまざまなアクセシビリティと自動テスト アプリケーションのニーズを満たすために慎重に指定された、既存の Microsoft UI オートメーションプロパティ、イベント、および制御パターンの例に従う必要があります。

カスタム プロパティ、イベント、または制御パターンの仕様を実装するには、クライアント側とプロバイダー側の両方の当事者の協力と合意が必要であり、両方の当事者が一貫して仕様を実装する必要があります。 企業は、 アクセシビリティ相互運用性アライアンス (AIA) などの業界組織と協力して、カスタム プロパティ、イベント、またはコントロール パターンの仕様を設計して公開することをお勧めします。 このようにして、コンセンサスに到達し、最も多様なアプリケーションとの相互運用性を確保することができます。

このトピックは、次のセクションで構成されています。

カスタム プロパティとイベントを使用するタイミング

カスタム プロパティ、イベント、またはコントロール パターンを作成する前に、UI オートメーションが既存のソリューションを提供していないことを確認してください。 たとえば、カスタムの "クリック" コントロール パターンを作成する必要はありません。 呼び出し コントロール パターンには、その機能が既に記述されているためです。

カスタム プロパティ、イベント、またはコントロール パターンが必要であると判断した場合は、あいまいすぎる、または汎用的ではないことを確認してください。 たとえば、"Show" というコントロール パターンは、UIA_IsExpandCollapsePatternAvailablePropertyIdや UIA_IsScrollItemPatternAvailablePropertyId などの要素の可用性プロパティによってコントロールの可視性を示すことができるため、役 立ちません。

カスタム ソリューションを実装する前に、必要であることを慎重に確認し、機能を完全に設計します。

カスタム プロパティの設計

UI オートメーションには、オートメーション要素のプロパティとコントロール パターン プロパティの 2 つの基本的な種類のプロパティが含まれています。 オートメーション要素のプロパティは、コントロールの種類に関係なく、すべてのUI オートメーション要素によって公開される、Name、AcceleratorKey、ClassName などの共通のプロパティ セットで構成されます。 コントロール パターンのプロパティは、特定のコントロール パターンを介してコントロールによって公開されます。 各コントロール パターンには、コントロールが公開する必要があるコントロール パターン プロパティの対応するセットがあります。 たとえば、 Grid コントロール パターンをサポートするコントロールは、ColumnCount プロパティと RowCount プロパティを公開します。

カスタムオートメーション要素プロパティまたはコントロール パターン プロパティは、次の設計ガイドラインに従う必要があります。

  • カスタム プロパティには、 UIAutomationType 列挙で指定された次のいずれかのデータ型が必要です。 カスタム プロパティでは、他のデータ型はサポートされていません。
    • UIAutomationType_Bool
    • UIAutomationType_Double
    • UIAutomationType_Element
    • UIAutomationType_Int
    • UIAutomationType_Point
    • UIAutomationType_String
  • カスタム プロパティに文字列データ (BSTR) が含まれている場合、プロパティがローカライズ可能かどうか (つまり、文字列を異なる UI 言語に変換できるかどうか) を指定する必要があります。
  • カスタム プロパティは、既存のプロパティの機能と重複しないようにする必要があります。

カスタム イベントの設計

アプリケーションでは、UI オートメーションイベント通知を使用して、UI 項目に関連する変更やアクションに応答します。 ほとんどのプロパティには、プロパティの値が変更されたときに発生UI オートメーションプロパティ変更イベントが関連付けられています。 カスタム プロパティを導入する場合は、必要になる可能性がある対応するカスタム イベントを導入することを検討する必要があります。

カスタム イベントは、次の設計ガイドラインに従う必要があります。

  • カスタム イベントは "ステートレス" である必要があります。特定のプロパティまたは値に関連付けることはできません。
  • カスタム イベントは、既存のイベントの定義またはロールと重複しないようにしてください。

カスタム UI オートメーション イベントと WinEvents

WinEvents は、Microsoft Windows プラットフォームの便利なプロセス間通信およびイベントメカニズムです。 ただし、新しい WinEvent ID を導入すると、他のアプリケーションやオペレーティング システムとの競合が発生し、システムが不安定になる可能性があるため、危険です。 競合を回避するために、Microsoft は WinEvents のいくつかの異なるカテゴリを定義しており、カテゴリごとに、WinEvent ID として使用する 1 つ以上の値の範囲を定義しています。 詳細については、「 WinEvent ID の割り当て」を参照してください。

カスタム UI オートメーション イベントは、UI オートメーション フレームワークで内部的にイベント ID を割り当てることで競合を回避します。

カスタム コントロール パターンの設計

コントロール パターンは、オートメーション要素から使用できる個別の機能を定義するプロパティ、メソッド、およびイベントを含むインターフェイスです。 コントロール パターン メソッドを使用すると、UI オートメーションクライアントはコントロールの特定の側面を操作できます。 コントロール パターンのプロパティとイベントは、コントロールの一部の側面に関する情報を提供し、コントロール パターンを実装するオートメーション要素の状態に関する情報を提供します。

カスタム コントロール パターンは、次の設計ガイドラインに従う必要があります。

  • カスタム コントロール パターンでは、特定のシナリオをカバーする必要があります。 たとえば、 ItemContainer コントロール パターンは、仮想化の状態に関係なく、包含オブジェクトのクエリを実行することを目的としていますが、含まれているオブジェクトを列挙したりカウントしたりすることはありません。
  • カスタム コントロール パターンは、既存のコントロール パターンの機能と重複しないようにする必要があります。 たとえば、 Invoke コントロール パターンと ExpandCollapse コントロール パターンを組み合わせて、新しいコントロール パターンとして表示することはできません。 既存のコントロール パターンを再利用するか、新しいコントロール パターンを使用して一意のシナリオを定義します。
  • 複雑なシナリオをサポートするために、複数のカスタム コントロール パターンを一緒に設計できます。 たとえば、 Selection コントロール パターンと SelectionItem コントロール パターンは連携して、一般的なオブジェクト選択シナリオをサポートします。

カスタム コントロール型

このトピックでは、カスタム UI オートメーションプロパティ、イベント、およびコントロール パターンを登録する方法に焦点を当てていますが、新しいコントロール型を導入することもできます。 カスタム プロパティ、イベント、およびコントロール パターンとは異なり、カスタム コントロール型は、実際には UI オートメーション ControlType プロパティの潜在的な値に過ぎないため、実行時にプログラムで登録することはできません。 ただし、カスタム コントロールの種類 ID を定義、発行、および他のクライアントとプロバイダーが使用できるようにすることができます。 コントロールの種類の詳細については、「UI オートメーションコントロールの種類の概要」を参照してください。

概念

カスタム プロパティ、イベント、およびコントロール パターンの登録

UI オートメーション プロパティの概要

UI オートメーション イベントの概要

UI オートメーション コントロール パターンの概要