用戶端的 UI 自動化屬性

注意

本文件適用對象為 .NET Framework 開發人員,其想要使用 System.Windows.Automation 命名空間中定義的受控 UI 自動化類別。 如需 UI 自動化的最新資訊,請參閱 Windows 自動化 API:UI 自動化

此概觀會介紹 UI 自動化屬性,這些屬性會公開給 UI 自動化用戶端應用程式。

AutomationElement 物件的屬性包含使用者介面 (UI) 元素的相關資訊,通常是控制項。 AutomationElement 的屬性是泛型;也就是不專屬於某個控制項類型。 這些屬性有許多公開於 AutomationElement.AutomationElementInformation 結構。

控制項模式也有屬性。 控制項模式的屬性專屬於此模式。 例如, ScrollPattern 的屬性可以讓用戶端運用程式來探索視窗是可以垂直或水平捲動,以及目前檢視大小和捲動位置。 控制項模式透過結構公開其所有屬性;例如, ScrollPattern.ScrollPatternInformation

UI 自動化屬性為唯讀資訊。 若要設定控制項的屬性,您必須使用適當控制項模式的方法。 例如,使用 Scroll 來變更捲動中視窗的位置值。

若要改善效能,擷取 AutomationElement 物件時,可以快取控制項和控制項模式的屬性值。 如需詳細資訊,請參閱 UI 自動化用戶端的快取

屬性識別碼

屬性識別碼 (ID) 是封裝在 AutomationProperty 物件內的唯一常數值。 UI 自動化用戶端應用程式會從 AutomationElement 類別或從適當的控制項模式類別取得這些識別碼,例如 ScrollPattern。 使用者介面自動化提供者從 AutomationElementIdentifiers 取得這些,或是從控制項模式識別項類別的其中一項取得,例如 ScrollPatternIdentifiers

提供者使用 IdAutomationProperty 數值來識別在 IRawElementProviderSimple.GetPropertyValue 方法中要查詢的屬性。 一般而言,用戶端應用程式不需要檢查 IdProgrammaticName 僅供偵錯和診斷之用。

屬性條件

屬性識別碼用於建構用來尋找 AutomationElement 物件的 PropertyCondition 物件。 例如,您要尋找有特定名稱的 AutomationElement 或是所有已啟用的控制項。 每個 PropertyCondition 都會指定一項 AutomationProperty 識別項和必須與屬性相符的值。

如需詳細資訊,請參閱下列主題:

擷取屬性

AutomationElement 的某些屬性和控制項模式類別的所有屬性公開為 Current 的巢狀屬性或 Cached 或控制項模式物件的 AutomationElement 屬性。

此外,任何 AutomationElement 或控制項模式屬性,包括在 CachedCurrent 結構中無法使用的屬性,可以使用下列其中一種方法來擷取。

這些方法提供稍微較佳的效能,也能存取屬性的完整範圍。

下列程式碼範例顯示兩種在 AutomationElement上擷取屬性的方式。

// elementList is an AutomationElement.

// The following two calls are equivalent.
string name = elementList.Current.Name;
name = elementList.GetCurrentPropertyValue(AutomationElement.NameProperty) as string;
' elementList is an AutomationElement.
' The following two calls are equivalent.
Dim name As String = elementList.Current.Name
name = CStr(elementList.GetCurrentPropertyValue(AutomationElement.NameProperty))

若要擷取受 AutomationElement支援的控制項模式的屬性,您不需要擷取控制項模式的物件。 只需傳遞其中一個模式屬性識別項至該方法即可。

下列程式碼範例顯示兩種在控制項模式上擷取屬性的方式。

// elementList is an AutomationElement representing a list box.
// Error-checking is omitted. Assume that elementList is known to support SelectionPattern.

SelectionPattern selectPattern =
    elementList.GetCurrentPattern(SelectionPattern.Pattern) as SelectionPattern;
bool isMultipleSelect = selectPattern.Current.CanSelectMultiple;

// The following call is equivalent to the one above.
isMultipleSelect = (bool)
    elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty);
' elementList is an AutomationElement representing a list box.
' Error-checking is omitted. Assume that elementList is known to support SelectionPattern.
Dim selectPattern As SelectionPattern = _
    DirectCast(elementList.GetCurrentPattern(SelectionPattern.Pattern), SelectionPattern)
Dim isMultipleSelect As Boolean = selectPattern.Current.CanSelectMultiple

' The following call is equivalent to the one above.
isMultipleSelect = CBool(elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty))

Get 方法會傳回 Object。 應用程式必須在使用值之前將傳回的物件轉換成適當的類型。

預設屬性值

如果 UI 自動化提供者未實作屬性,則 UI 自動化系統可以提供預設值。 例如,如果控制項的提供者不支援 HelpTextProperty 所識別的屬性,UI 自動化會傳回空字串。 同樣地,如果提供者不支援 IsDockPatternAvailableProperty 所識別的屬性,UI 自動化會傳回 false

您可以使用 AutomationElement.GetCachedPropertyValueAutomationElement.GetCurrentPropertyValue 方法多載變更此行為。 當您將 true 指定為第二個參數時,UI 自動化不會傳回預設值,而是傳回特殊值 NotSupported

下列範例程式碼會嘗試從項目擷取屬性,如果不支援該屬性,則改用應用程式定義的值。

// elementList is an AutomationElement.
object help = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, true);
if (help == AutomationElement.NotSupported)
{
    help = "No help available";
}
string helpText = (string)help;
' elementList is an AutomationElement.
Dim help As Object = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, True)
If help Is AutomationElement.NotSupported Then
    help = "No help available"
End If
Dim helpText As String = CStr(help)

若要找出項目支援哪些屬性,請使用 GetSupportedProperties。 這會傳回 AutomationProperty 識別項的陣列。

屬性變更事件

AutomationElement 或控制項模式的屬性值變更,便會引發事件。 應用程式可以訂閱這類事件,方法是呼叫 AddAutomationPropertyChangedEventHandler、提供 AutomationProperty 識別碼的陣列做為最後一個參數來指定想要的屬性。

AutomationPropertyChangedEventHandler,您可以檢查事件引數的 Property 成員,辨識已變更的屬性。 引數也包含已變更的 UI 自動化屬性的舊值和新值。 這些值的類型都是 Object ,而且必須在使用之前轉型成正確的類型。

其他 AutomationElement 屬性

除了 CurrentCached 屬性結構, AutomationElement 具有下列屬性,這會透過簡單的屬性存取子擷取。

屬性 說明
CachedChildren 快取中的子 AutomationElement 物件集合。
CachedParent 快取中的 AutomationElement 父物件。
FocusedElement (靜態屬性) 具有輸入焦點的 AutomationElement
RootElement (靜態屬性) 根 AutomationElement

另請參閱