カスタム プロパティ、イベント、およびコントロール パターンを設計する
カスタム プロパティ、イベント、またはコントロール パターンの設計は、さまざまなコントロール実装で役立つ必要があります。 限られたシナリオでのみ役立つコントロールまたはアプリケーション固有の設計は避ける必要があります。 この設計は、既存の Microsoft UI オートメーションのプロパティ、イベント、およびコントロール パターンの例に従う必要があります。このパターンは、さまざまなアクセシビリティと自動テスト アプリケーションのニーズを満たすように慎重に指定されています。
カスタム プロパティ、イベント、またはコントロール パターンの仕様を実装するには、クライアント側とプロバイダー側の両方の当事者の協力と合意が必要であり、両方の当事者が一貫して仕様を実装する必要があります。 企業は、Accessibility Interoperability Alliance (AIA) などの業界組織と協力して、カスタム プロパティ、イベント、またはコントロール パターンの仕様を設計して公開することをお勧めします。 これにより、コンセンサスに達し、さまざまなアプリケーションとの相互運用性を確保できます。
このトピックには、次のセクションが含まれています。
- カスタム プロパティとイベント を使用するタイミングの
- カスタム プロパティの設計
- カスタム イベント の設計の
- カスタム UI オートメーション イベントと WinEvents を する
- カスタム コントロール パターンの設計
- カスタム コントロール型 を する
- 関連トピック
カスタム プロパティとイベントを使用するタイミング
カスタム プロパティ、イベント、またはコントロール パターンを作成する前に、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 では複数の異なるカテゴリの WinEvent を定義し、カテゴリごとに、WinEvent ID として使用する 1 つ以上の値範囲を定義しています。 詳細については、「WinEvent IDの割り当て」を参照してください。
カスタム UI オートメーション イベントは、UI オートメーション フレームワーク内でイベント ID を内部的に割り当てることで競合を回避します。
カスタム コントロール パターンの設計
コントロール パターンは、オートメーション要素から使用できる個別の機能を定義するプロパティ、メソッド、およびイベントを含むインターフェイスです。 コントロール パターン メソッドを使用すると、UI オートメーション クライアントはコントロールの特定の側面を操作できます。 コントロール パターンのプロパティとイベントは、コントロールの一部の側面に関する情報を提供し、コントロール パターンを実装するオートメーション要素の状態に関する情報を提供します。
カスタム コントロール パターンは、次の設計ガイドラインに従う必要があります。
- カスタム コントロール パターンでは、特定のシナリオをカバーする必要があります。 たとえば、ItemContainer コントロール パターンは、仮想化の状態に関係なく、包含オブジェクトのクエリを実行することを目的としていますが、含まれているオブジェクトを列挙したりカウントしたりすることはありません。
- カスタム コントロール パターンは、既存のコントロール パターンの機能と重複しないようにする必要があります。 たとえば、呼び出し と ExpandCollapse コントロール パターンを組み合わせて、新しいコントロール パターンとして表示することはできません。 既存のコントロール パターンを再利用するか、新しいコントロール パターンを使用して一意のシナリオを定義します。
- 複雑なシナリオをサポートするために、複数のカスタム コントロール パターンを一緒に設計できます。 たとえば、Selection と SelectionItem コントロール パターンは連携して、一般的なオブジェクト選択シナリオをサポートします。
カスタム コントロール型
このトピックでは、カスタム UI オートメーションのプロパティ、イベント、およびコントロール パターンを登録する方法に焦点を当てていますが、新しいコントロール型を導入することもできます。 カスタム プロパティ、イベント、およびコントロール パターンとは異なり、カスタム コントロール型は、実際には UI オートメーション ControlType プロパティの潜在的な値に過ぎないため、実行時にプログラムで登録することはできません。 ただし、カスタム コントロール型 ID を定義、公開、および他のクライアントとプロバイダーが使用できるようにすることができます。 コントロール型の詳細については、「UI オートメーション コントロールの種類の概要」を参照してください。
関連トピック
-
概念