使用和更新動態資源
- 5 分鐘
在上一個單元中,您已在 Extensible Application Markup Language (XAML) 中定義一個資源並使用它作為靜態值。 不過,在某些情況下 StaticResource 不適合。 請考慮下列情況:
假設您想要實作可讓使用者在執行階段變更應用程式外觀的色彩佈景主題。 StaticResource 標記延伸模組只會執行字典查閱一次,因此無法動態更新UI。
您需將使用者喜好設定儲存在 Web 伺服器上,並在應用程式啟動時載入它們。 如果字典中找不到索引鍵, StaticResource 標記延伸模組會擲回例外狀況。
此單元會告訴您如何使用動態資源來處理這類問題。
如何在執行階段更新資源
您可以將資源儲存在資源字典中。 您可以撰寫程式碼,在執行階段上更新這些資源。 您甚至可以新增新的資源,或移除現有的資源。
請思考一下下列範例:
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
假設您想要在應用程式執行時變更 PanelBackgroundColor 資源的值。 您可以將程式代碼新增至頁面的程式代碼後置檔案,以存取 Resources 屬性。 下列範例會將資源值從先前的 XAML 範例更新為不同的顏色。
this.Resources["PanelBackgroundColor"] = Colors.Green;
什麼是 DynamicResource?
DynamicResource 是另一個標記延伸模組,用於查閱資源字典中的資源。 它類似於 StaticResource ,因為它會在建立目標物件時執行字典查閱。 但它也會接聽字典中資源的變更。 如果字典中的資源值變更, DynamicResource 會自動更新 UI。
DynamicResource 優於 StaticResource。 如果 DynamicResource 在字典中找不到索引鍵,則會讓 屬性保持未設定。 不同於 StaticResource,遺漏的索引鍵不是錯誤,也不會擲回例外狀況。
注意
DynamicResource 標記延伸的性質會對您的應用程式造成少量效能影響。 雖然您可以在 XAML 頁面中使用 DynamicResource 取代 StaticResource ,但如果資源未變更,則應該使用 StaticResource 標記延伸模組來參考它。
若要使用先前範例中更新的背景色彩,您可以在 XAML 程式代碼中套用 DynamicResource ,如下所示:
<ContentPage ...>
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
<StackLayout BackgroundColor="{DynamicResource PanelBackgroundColor}">
...
</StackLayout>
</ContentPage>
如果 PanelBackgroundColor 資源的值變更,StackLayout 控件的 BackgroundColor 值會自動更新。