仮想化された項目の操作

このトピックでは、 ItemContainer コントロール パターンと VirtualizedItem コントロール パターンによって提供される機能を使用して、仮想化された項目に関する情報を検索および取得する方法について説明します。

仮想化の概要

多数の子項目を含むコントロールは、仮想化を使用して項目を効率的に管理できます。 仮想化を使用すると、コントロールは、特定の時点で項目のサブセットに対してのみ完全な情報をメモリ内に保持します。 通常、サブセットには、ユーザーに現在表示されている項目のみが含まれます。 残りの仮想化された項目に関する完全な情報は、ストレージに保持され、メモリに読み込まれるか、またはコントロールが必要とするように認識されます(たとえば、新しい項目がユーザーに表示されるようになる)。

仮想化を使用するコントロールは、UI オートメーション ツリー内の Microsoft UI オートメーション要素として実現された項目のみが完全に使用できるため、課題を表します。 仮想化された項目はツリー内に存在しないため、それらに関する情報はクライアントで使用できません。 仮想化された項目に関する情報を取得するには、クライアントは、UI オートメーションに強制的に要求を渡して項目をコントロールに実現する方法が必要です。 項目が実現した後、UI オートメーションはそれらのUI オートメーション要素を作成できます。 UI オートメーションには、クライアントが仮想化された項目 (ItemContainerVirtualizedItem) を操作できるようにするための 2 つの制御パターンが含まれています。

コントロールが仮想化をサポートする方法

仮想化された項目を含めることができるコントロールは、 ItemContainer コントロール パターンをサポートする必要があります。 さらに、仮想化できる項目は、 VirtualizedItem コントロール パターンをサポートする必要があります。 ItemContainer コントロール パターンと VirtualizedItem コントロール パターンによって公開される機能は、 IUIAutomationItemContainerPattern インターフェイスと IUIAutomationVirtualizedItemPattern インターフェイスを介してクライアントからアクセスできます。

クライアントが仮想化された項目を見つけて実現する方法

クライアントは IUIAutomationItemContainerPattern::FindItemByProperty メソッドを使用して、特定のプロパティの値に基づいてコンテナー内の子項目を検索できます。 メソッドは、コンテナー内の最初の項目、または指定した項目の後にある項目を取得することもできます。 一致する子項目が見つかった場合、 FindItemByProperty は項目の IUIAutomationElement インターフェイスを取得します。 ただし、子項目が仮想化されている場合、 IUIAutomationElement インターフェイスはプレースホルダーです。 UIA_E_ELEMENTNOTAVAILABLE エラーは、クライアントが IUIAutomationElement インターフェイスを使用してプロパティ値を取得しようとしたり、まだ使用できないメソッドを呼び出そうとしたときに発生します。 プレースホルダーを使用して使用できるプロパティまたはメソッドは、コントロールの実装によって異なります。 プレースホルダーの唯一の要件は、 IUIAutomationVirtualizedItemPattern インターフェイスをサポートすることです。

UIA_E_ELEMENTNOTAVAILABLE エラーは、アイテムが仮想化される可能性があることをクライアントに示します。 クライアントは、アイテムの IUIAutomationVirtualizedItemPattern インターフェイスを取得し、 IUIAutomationVirtualizedItemPattern::Realize メソッドを呼び出してアイテムを実現することで応答する必要があります。 これが成功した場合、 IUIAutomationElement インターフェイスは、すべての適切なプロパティを使用して完全に機能します。

コントロールの実装によっては、 IUIAutomationVirtualizedItemPattern::Realize を呼び出すと、コントロールが項目をビューにスクロールする場合があります。 ただし、クライアントは、ビューにスクロールする項目に依存したり、表示したりしないでください。 アイテムが確実に表示されるように、クライアントは IUIAutomationScrollItemPattern::ScrollIntoView メソッドを使用できます。

仮想化のUI オートメーションサポートを使用する方法を示すコード例については、「仮想化された項目を取得する方法」を参照してください。

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