設計自定義屬性、事件和控制件模式
自訂屬性、事件或控件模式的設計在各種不同的控件實作中應該很有用。 只有在有限的案例中才適用控件或應用程式特定設計,應避免使用。 設計應遵循現有Microsoft UI 自動化屬性、事件和控件模式的範例,這些模式經過仔細指定,以符合各種輔助功能和自動化測試應用程式的需求。
實作自定義屬性、事件或控件模式的規格牽涉到用戶端和提供者端雙方的合作和協定,而且要求雙方一致地實作規格。 鼓勵公司與業界組織合作,例如 輔助功能互作性聯盟(AIA) 來設計和發佈自定義屬性、事件或控件模式的規格。 如此一來,就可以達成共識,並確保與各種應用程式之間的互作性。
本主題包含下列各節:
使用自訂屬性和事件的時機
建立自訂屬性、事件或控件模式之前,請確定UI自動化不會提供現有的解決方案。 例如,建立自定義的「按兩下」控制模式並非必要,因為 叫用 控件模式已經描述該功能。
如果您決定需要自定義屬性、事件或控件模式,請確定它不是太模糊或泛型。 例如,稱為 「顯示」的控制項模式並不有用,因為控件的可見性可以透過元素上的可用性屬性來表示,例如 UIA_IsExpandCollapsePatternAvailablePropertyId 或 UIA_IsScrollItemPatternAvailablePropertyId。
實作自定義解決方案之前,請仔細確認需要,然後完全設計功能。
設計自定義屬性
UI 自動化包含兩種基本類型的屬性:automation 元素屬性,以及控件模式屬性。 自動化元素屬性是由一組常見的屬性所組成,例如 Name、AcceleratorKey 和 ClassName,不論控件類型為何,都會由所有 UI 自動化元素公開。 控制項模式屬性是由控件透過特定控制項模式公開。 每個控制項模式都有一組對應的控制項模式屬性,控件必須公開。 例如,支援 Grid 控件模式的控件會公開 ColumnCount 和 RowCount 屬性。
自訂自動化元素屬性或控制項模式屬性應遵循下列設計指導方針:
- 自定義屬性必須具有下列其中一個數據類型,UIAutomationType 列舉。 自訂屬性不支援其他數據類型。
- UIAutomationType_Bool
- UIAutomationType_Double
- UIAutomationType_Element
- UIAutomationType_Int
- UIAutomationType_Point
- UIAutomationType_String
- 如果自定義屬性包含字串數據(BSTR),則規格必須指出屬性是否可當地語系化(也就是說,字串是否可以轉譯成不同的UI語言)。
- 自訂屬性不應與現有屬性的特性或功能重疊。
設計自定義事件
應用程式會使用UI自動化事件通知來回應涉及UI專案的變更和動作。 大部分屬性都有UI自動化在屬性值變更時所引發的相關聯屬性變更事件。 如果您引進自定義屬性,您應該考慮引入任何可能也需要的對應自定義事件。
自定義事件應遵循下列設計指導方針:
- 自定義事件必須是「無狀態」。它無法與特定屬性或值產生關聯。
- 自定義事件不應與任何現有事件的定義或角色重疊。
自訂UI自動化事件和 WinEvents
WinEvents 是Microsoft Windows 平臺中有用的進程間通訊和事件機制。 不過,引進新的 WinEvent 標識符是有風險的,因為它可能會與其他應用程式或作系統發生衝突,導致系統變得不穩定。 為了避免衝突,Microsoft已定義數個不同的 WinEvent 類別,而且針對每個類別,已定義一或多個值範圍,以作為 WinEvent 識別碼使用。 如需詳細資訊,請參閱 設定 WinEvent 識別子。
自訂UI自動化事件可藉由在UI自動化架構內部配置事件標識碼來避免衝突。
設計自定義控制項模式
控件模式是具有屬性、方法和事件的介面,可定義自動化專案可用的離散功能片段。 控制項模式方法可讓UI自動化用戶端作控件的特定層面。 控件模式屬性和事件提供控制項某些層面的相關信息,並提供實作控件模式之自動化專案狀態的相關信息。
自定義控件模式應遵循下列設計指導方針:
- 自定義控件模式應涵蓋特定案例。 例如,不論虛擬化狀態為何,ItemContainer 控件模式都適用於查詢自主物件,但不會列舉或計算自主物件。
- 自定義控制項模式不應與現有控制樣式的功能重疊。 例如,Invoke 和 ExpandCollapse 控件模式不應結合並呈現為新的控制項模式。 重複使用現有的控制項模式,或使用新的控制項模式定義唯一的案例。
- 多個自定義控件模式可以一起設計來支持複雜的案例。 例如,Selection 和 SelectionItem 控件模式一起運作,以支援一般對象選取案例。
自定義控制項類型
雖然本主題著重於如何註冊自定義UI自動化屬性、事件和控件模式,但也可以引進新的控件類型。 不同於自定義屬性、事件和控件模式,自定義控件類型無法在運行時間以程序設計方式註冊,因為它實際上只是UI AutomationControlType屬性的潛在值。 不過,自定義控件類型標識碼可以定義、發佈及提供給其他用戶端和提供者使用。 如需控制項類型的詳細資訊,請參閱 UI 自動化控制項類型概觀。
相關主題