使用虛擬化專案
本主題描述如何使用 ItemContainer 和 VirtualizedItem 控制項模式所提供的功能,來尋找及擷取虛擬化專案的相關資訊。
虛擬化概觀
包含大量子專案的控制項可以使用虛擬化有效率地管理專案。 透過虛擬化,控制項會針對任何指定時間只保留一部分專案記憶體中的完整資訊。 一般而言,子集只包含使用者目前可見的專案。 剩餘虛擬化專案的完整資訊會保留在儲存體中,並載入記憶體或實現,例如,控制項需要它,例如,當使用者看到新專案時。
使用虛擬化的控制項代表挑戰,因為只有實現的專案完全可用,因為消費者介面自動化樹狀結構中的 Microsoft 消費者介面自動化元素。 虛擬化專案不存在於樹狀結構中,因此用戶端無法使用它們的相關資訊。 若要擷取虛擬化專案的相關資訊,用戶端需要一種方式來強制消費者介面自動化將要求傳遞至 控制項。 在專案實現之後,消費者介面自動化可以為其建立消費者介面自動化元素。 消費者介面自動化包含兩種控制項模式,可讓用戶端使用虛擬化專案:ItemContainer和VirtualizedItem。
控制項如何支援虛擬化
任何可以包含虛擬化專案的控制項都必須支援 ItemContainer 控制項模式。 此外,任何可以虛擬化的專案都必須支援 VirtualizedItem 控制項模式。 ItemContainer 和 VirtualizedItem 控制項模式公開的功能可透過 IUIAutomationItemContainerPattern 和 IUIAutomationVirtualizedItemPattern 介面存取。
用戶端如何尋找及實現虛擬化專案
用戶端可以使用 IUIAutomationItemContainerPattern::FindItemByProperty 方法,根據特定屬性的值來搜尋容器中的子專案。 方法也可以擷取容器中的第一個專案,或位於指定專案後面的專案。 如果找到相符的子專案, FindItemByProperty 會擷取專案的 IUIAutomationElement 介面。 不過,如果子專案已虛擬化, 則 IUIAutomationElement 介面是預留位置。 當用戶端嘗試使用IUIAutomationElement介面來擷取屬性值或呼叫尚未提供的方法時,就會發生UIA_E_ELEMENTNOTAVAILABLE錯誤。 哪些屬性或方法可透過預留位置取得,取決於控制項實作。 預留位置的唯一需求是支援 IUIAutomationVirtualizedItemPattern 介面。
UIA_E_ELEMENTNOTAVAILABLE錯誤是用戶端可能虛擬化專案的指示。 用戶端應該藉由擷取專案的 IUIAutomationVirtualizedItemPattern 介面來回應,然後藉由呼叫 IUIAutomationVirtualizedItemPattern::Realize 方法來實現專案。 如果成功, IUIAutomationElement 介面會完全正常運作,並具有所有可用的適當屬性。
根據控制項實作而定,呼叫 IUIAutomationVirtualizedItemPattern::Realize 可能會導致控制項將專案捲動到檢視中。 不過,用戶端不應該依賴專案捲動到檢視或顯示。 為了確保專案可見,用戶端可以使用 IUIAutomationScrollItemPattern::ScrollIntoView 方法。
範例
如需示範如何使用虛擬化消費者介面自動化支援的範例程式碼,請參閱如何擷取虛擬化專案。
相關主題