許多常見的控制項會繼承 Control 類別,Control 類別從 OS 組件版本 10240 到目前最新的版本 16299,歷經兩年多的時間,也有了許多更動,以下針對各個版本的更動做介紹。
SDK 14393
public ElementSoundMode ElementSoundMode { get; set; }
設定控制項的音效模式
這是針對 UWP on XBOX 而生的屬性,在 SDK 14393 之後 UWP 可以幾近無痛地轉移到 XBOX 平台執行。XBOX 平台的特性包含了 1. 使用者是使用手把在控制 app 2. 使用者通常會坐在離螢幕一定的距離,在這兩個特性之下,為了使用者體驗,app 必須支援如 切換 focus、點擊、退出、切換頁面 等音效,而 UWP SDK 也很貼心地幫開發者在常見的內建控制項 (ListView、Button... 等) 加上了音效。
- 設定為 ElementSoundPlayerState.Off 則 app 執行在所有平台上,都不會有音效。
- 設定為 ElementSoundPlayerState.On 則所有平台都會有音效。
- 設定為 ElementSoundPlayerState.Auto (即預設值),則系統會根據目前 app 所執行的平台而自動調整音效設定,目前僅有 Xbox 在此設定下會有音效。
public bool IsFocusEngagementEnabled { get; set; }
設定控制項是否有自己內部的 Focus 行為
這也是針對 UWP on XBOX 而生的屬性,由於 XBOX app 大多仰賴手把的方向鍵控制,所以將 Focus 行為最佳化是開發 UWP on XBOX app 的重點之一,若是開發者作了一個較為複雜的父控制項,該父控制項內含多個子控制項,且開發者預期使用者會在 Focus 至父控制項後按下 A 鍵才可以進而切換內部子控制項間 Focus,則需要將父控制項的 IsFocusEngagementEnabled 設為 true,並監聽父控制項的 FocusEngaged 事件,在 FocusEngaged 的 EventHandler 內處理內部子元件之間的 Focus 行為。
public bool IsFocusEngaged { get; set; }
當控制項的 IsFocusEngagementEnabled 設定為 true 時,若控制項正處於 FocusEngaged 狀態 (即 Focus 行為從全域轉變為僅限於該控制項內),則此屬性為 true。當使用者按下手把上的 B 鍵時,則可退出 FocusEngaged 狀態 (即 Focus 從僅限於該控制項轉變回全域)。
public event TypedEventHandler FocusEngaged<Control, FocusEngagedEventArgs>
當控制項進入 FocusEngaged 狀態時會觸發此事件。
public event TypedEventHandler FocusDisengaged<Control, FocusDisengagedEventArgs>
當控制項退出 FocusEngaged 狀態時會觸發此事件。
public DependencyObject XYFocusUp { get; set; }
指定當控制項被 Focused 且按下手把上的上鍵時,會切換 Focus 至哪個控制項
public DependencyObject XYFocusDown { get; set; }
指定當控制項被 Focused 且按下手把上的下鍵時,會切換 Focus 至哪個控制項
public DependencyObject XYFocusLeft { get; set; }
指定當控制項被 Focused 且按下手把上的左鍵時,會切換 Focus 至哪個控制項
public DependencyObject XYFocusRight { get; set; }
指定當控制項被 Focused 且按下手把上的右鍵時,會切換 Focus 至哪個控制項
public RequiresPointer RequiresPointer { get; set; }
設定是否在 XBOX 上啟用游標模式
這也是針對 UWP on XBOX 而生的屬性,XBOX app 預設是使用手把透過方向鍵做 Focus 切換,但若某些控制項較難透過 Focus 切換時,則可將 RequiresPointer 屬性設定為 RequiresPointer.WhenEngaged 或 RequiresPointer.WhenFocused 以啟用游標模式。
設定為 RequiresPointer.WhenFocused 時,則使用者只要透過手把移動 Focus 至該控制項時便會啟用游標模式。
SDK 15063
public Uri DefaultStyleResourceUri { get; set; }
指定預設的 Style 路徑