共用方式為


使用虛擬化項目

本主題描述如何使用 ItemContainerVirtualizedItem 控件模式所提供的功能,以尋找和擷取虛擬化專案的相關信息。

虛擬化概觀

包含大量子專案的控件可以使用虛擬化來有效率地管理專案。 透過虛擬化,控制系統在記憶體中只會在任何時間維護項目子集的完整資訊。 一般而言,子集只包含使用者目前可見的項目。 剩餘虛擬化項目的完整資訊會保存在存儲中,當控件需要時,資訊會載入記憶體中或被實現。例如,當使用者看到新項目時,這些項目會顯示出來。

使用虛擬化技術的控件構成了一個挑戰,因為只有已實現的元素能夠在UI自動化樹中完整地作為Microsoft UI自動化的元素使用。 虛擬化專案不存在於樹狀結構中,因此客戶端無法使用其相關信息。 若要擷取虛擬化項目的相關信息,用戶端需要一種方式來強制 UI 自動化將要求傳遞至控制元件,以呈現項目。 專案實現之後,使用者介面自動化可以為其建立UI自動化元素。 使用者介面自動化包含兩種控件模式,可讓用戶端使用虛擬化專案:ItemContainerVirtualizedItem

控件如何支持虛擬化

任何可包含虛擬化專案的控件都必須支援 ItemContainer 控件模式。 此外,任何可虛擬化的專案都必須支援 VirtualizedItem 控件模式。 透過 IUIAutomationItemContainerPatternIUIAutomationVirtualizedItemPattern 介面,即可存取由 ItemContainer 和 VirtualizedItem 控件模式公開的功能。

用戶端如何尋找及實現虛擬化專案

用戶端可以使用 IUIAutomationItemContainerPattern::FindItemByProperty 方法,根據特定屬性的值搜尋容器中的子專案。 方法也可以擷取容器中的第一個專案,或位於指定專案後面的專案。 如果找到相符的子專案,FindItemByProperty 會取得該專案的 IUIAutomationElement 介面。 不過,如果子項目被虛擬化,則 IUIAutomationElement 介面是佔位符。 當客戶端嘗試使用 IUIAutomationElement 介面來擷取尚未可用的屬性值或呼叫方法時,就會發生 UIA_E_ELEMENTNOTAVAILABLE 錯誤。 哪些屬性或方法可透過佔位元取得,取決於控件實作。 佔位符的唯一需求是支援 IUIAutomationVirtualizedItemPattern 介面。

UIA_E_ELEMENTNOTAVAILABLE 錯誤是指示客戶端,某個項目可能被虛擬化。 客戶端應該藉由擷取專案的 IUIAutomationVirtualizedItemPattern 介面來回應,然後呼叫 IUIAutomationVirtualizedItemPattern::Realize 方法來實現專案。 如果成功,IUIAutomationElement 介面將能完整運作,並具備所有適當的可用屬性。

根據控制項實作,呼叫 IUIAutomationVirtualizedItemPattern::Realize 可能會導致控制項將專案捲動到檢視中。 不過,客戶端不應該依賴項目捲動至畫面中或被顯示出來。 為了確保項目可見,用戶端可以使用 IUIAutomationScrollItemPattern::ScrollIntoView 方法。

如需示範如何使用虛擬化 UI 自動化支援的範例程式代碼,請參閱 如何擷取虛擬化專案

UI 自動化控制項模式概觀