ItemContainer コントロール パターン
メソッドに関する情報など、IItemContainerProvider実装するためのガイドラインと規則について説明します。 ItemContainer コントロール パターンは、項目の仮想化をサポートするために使用されます。
多数の子項目を含むコントロールは、仮想化を使用して項目を効率的に管理できます。 仮想化を使用すると、コントロールは、特定の時点で項目のサブセットについてのみ、メモリ内の完全な情報を保持します。 通常、サブセットには、ユーザーに現在表示されている項目のみが含まれます。 残りの仮想化された項目に関する完全な情報は、ストレージに保持され、メモリに読み込まれるか、コントロールが必要とするように実現されます。たとえば、新しい項目がユーザーに表示されるようになります。
たとえば、次の図は、何千もの仮想化された項目を含むリスト ボックスを示しています。 コントロールは現在表示されている子項目についてのみ完全な情報を保持するため、プロバイダーはアイテム 100 - 127 に対してのみ Microsoft UI オートメーション要素を公開できます。
仮想化を使用するコントロールは、実現された (仮想化解除された) 項目のみが UI オートメーション ツリーの UI オートメーション要素として完全に使用できるため、課題を表します。 仮想化された項目はツリーに存在しないため、それらに関する情報は使用できません。
仮想化された項目に関する情報を提供するために、プロバイダーは ItemContainer コントロール パターンを実装します。このパターンにより、IItemContainerProvider インターフェイスが公開されます。 FindItemByProperty メソッドは、Name、automationId 、IsSelectedなど、特定のプロパティの値に基づいて子項目検索します。 項目が仮想化されている場合は、FindItemByProperty 項目の UI オートメーション プレースホルダー要素を取得します。 プレースホルダー要素は、VirtualizedItem コントロール パターンのみをサポートする IRawElementProviderSimple インターフェイスの実装です。
IVirtualizedItemProvider::Realiz メソッドを使用すると、クライアントは仮想化された項目の実現を要求できるため、必要なすべてのプロパティとパターンを使用できるように、項目の完全な UI オートメーション要素が公開されます。
ItemContainer 制御パターンの主な目的は、仮想化されたコンテナー シナリオをサポートすることですが、コンテナーが仮想化を使用しているかどうかに関係なく、名前で子項目を取得する任意のコンテナーで実装できます。
このトピックには、次のセクションが含まれています。
- 実装ガイドラインと規則
- IItemContainerProvider の必須メンバーの
- 関連トピック
実装のガイドラインと規則
ItemContainer コントロール パターンを実装する場合は、次のガイドラインと規則に注意してください。
- 仮想化された項目を含めることができるコントロールは、ItemContainer コントロール パターンをサポートする必要があります。 プロパティ値に基づいて項目の取得をサポートするすべてのコンテナーは、コンテナーが仮想化を使用しているかどうかに関係なく、このパターンをサポートできます。
- コンテナーを仮想化すると、Selection、Table、Grid などの他のコントロール パターンが影響を受ける可能性があります。 たとえば、ISelectionProvider::GetSelection メソッドは、ビューポート内にある要素のみ、または現在仮想化されていない選択された要素のみをサポートできます。
- スクロール コントロール パターンは、仮想化の影響を受けません。
- 仮想化された項目の項目数またはインデックス情報は使用できません。 仮想化されたコントロールでは、必要に応じて、DescribedBy または ItemStatus プロパティを使用して、この情報を提供できます。
- コントロール開発者は、仮想化の使用の影響を受けるすべての UI オートメーション プロパティとコントロール パターンの詳細を文書化して公開する必要があります。 ItemContainer と VirtualizedItem コントロール パターンは基本的なサポートを提供しますが、一部の仮想化動作をサポートしていない場合があります。
次のガイドラインと要件は、IItemContainerProvider::FindItemByProperty メソッドに適用されます。
- 必須ではありませんが、FindItemByProperty では、名、AutomationId、および IsSelected プロパティ サポートすることを強くお勧めします。
- FindItemByProperty は、一致するオブジェクトを見つけるために複数のオブジェクトを走査する必要がある場合に、低速になる可能性があります。
- FindItemByProperty を繰り返し呼び出して、順番に項目を検索できます。 各項目が 1 回だけ返される限り、アイテムは任意の順序で指定できます。
- FindItemByProperty は、UI オートメーション ツリーのコントロールまたはコンテンツ ビューに表示される要素のみを検索するために実装できます。 生のビューにのみ表示される要素はスキップして、"item" の一部のみを表す複数の要素をユーザーに取得しないようにすることができます。
- 検索条件が仮想化された項目と一致する場合、プロバイダーは、VirtualizedItem コントロール パターンをサポートするプレースホルダー要素を返すことができます。 プレースホルダー要素には、次のガイドラインが適用されます。
- 仮想化された項目のプレースホルダー要素を取得しても、UI が変更されないようにする必要があります。
- プレースホルダー要素は、他の子要素のピアである必要があります (構造体変更イベントが必要です)。
- 可能であれば、プロバイダーはプレースホルダーの代わりに完全なオートメーション要素を作成できます。
- 検索条件が仮想化されていない要素と一致する場合、プロバイダーはプレースホルダーではなく実際の要素を返す必要があります。
- 項目が見つからない場合、IItemContainerProvider::FindItemByProperty、pFound パラメーターを NULL を し、S_OKを返す必要があります。
- propertyId パラメーターが 0 の場合、プロバイダーは pStartAfter 後に次の項目返す必要があります。
- pStartAfter パラメーターが NULL 、propertyId が 0 の場合、プロバイダーはコンテナー内の最初の項目を返す必要があります。
- propertyId パラメーターが 0 の場合、値パラメーターは無視されます。
次のガイドラインと要件は、UI オートメーション ツリー内の仮想化された項目のプレースホルダー要素に適用されます。
- プロバイダーは、プレースホルダー要素に対してより多くのプロパティとコントロール パターンをサポートすることをお勧めしますが、VirtualizedItem コントロール パターンのみが必要です。
- プロバイダーは、IItemContainerProvider::FindItemByPropertyが再度呼び出されたときに、前のプレースホルダー要素を無効にすることができます。 (クライアントがプレースホルダー要素を認識する必要がある場合は、すぐに行う必要があります。それ以外の場合は、findItemByProperty が再び呼び出された場合、または何らかの理由でビューポートが変更された場合は、要素を無効にすることができます)。
- スクロールやサイズ変更などの UI アクションにより、コンテナーのビューポートが変更され、子項目の新しいセットが表示される可能性があります。 この場合、以前に取得したプレースホルダー要素は、UI オートメーション ツリーでは使用できない場合があります。
- プロバイダーは、コンテナー オブジェクトのビューポートで画面上で使用できる UI 要素を仮想化しないでください。
IItemContainerProvider の必須メンバー
IItemContainerProvider インターフェイスを実装する場合は、次のメソッドが必要です。
必須メンバー | メンバーの種類 | 筆記 |
---|---|---|
FindItemByPropertyの | 方式 | 何一つ |
ItemContainer コントロール パターンには、関連付けられたプロパティまたはイベントがありません。
関連トピック
-
VirtualizedItem コントロール パターン の