Dynamische resources gebruiken en bijwerken
In de vorige les hebt u een resource gedefinieerd in Extensible Application Markup Language (XAML) en deze gebruikt als een statische waarde. Er zijn echter enkele gevallen waarin StaticResource niet geschikt is. Bekijk de volgende scenario's:
Stel dat u kleurthema's wilt implementeren waarmee de gebruiker het uiterlijk van de app tijdens runtime kan wijzigen. Met de markeringsextensie StaticResource wordt de woordenlijst slechts eenmaal opgezoekt, zodat de gebruikersinterface niet dynamisch kan worden bijgewerkt.
U slaat gebruikersvoorkeuren op een webserver op en laadt deze wanneer de toepassing wordt gestart. De markeringsextensie StaticResource genereert een uitzondering als de sleutel niet in de woordenlijst wordt gevonden.
In deze les ziet u hoe u problemen zoals deze kunt afhandelen met behulp van dynamische resources.
Resources bijwerken tijdens runtime
U slaat resources op in een resourcewoordenlijst. U kunt code schrijven om deze resources tijdens runtime bij te werken. U kunt zelfs nieuwe resources toevoegen of bestaande resources verwijderen.
Kijk een naar het volgende voorbeeld:
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
Stel dat u de waarde van de PanelBackgroundColor-resource wilt wijzigen terwijl de toepassing wordt uitgevoerd. U kunt code toevoegen aan het code-behind-bestand voor de pagina om toegang te krijgen tot de eigenschap Resources . In het volgende voorbeeld wordt de resourcewaarde van het vorige XAML-voorbeeld bijgewerkt naar een andere kleur.
this.Resources["PanelBackgroundColor"] = Colors.Green;
Wat is DynamicResource?
DynamicResource is een andere markeringsextensie voor het opzoeken van resources in een resourcewoordenlijst. Het is vergelijkbaar met StaticResource omdat er een woordenlijstzoekactie wordt uitgevoerd wanneer het doelobject wordt gemaakt. Maar het luistert ook naar wijzigingen in de resource in de woordenlijst. Als de resourcewaarde in de woordenlijst wordt gewijzigd, werkt DynamicResource de gebruikersinterface automatisch bij.
DynamicResource heeft een voordeel ten opzichte van StaticResource. Als DynamicResource de sleutel niet in de woordenlijst kan vinden, blijft de eigenschap uitgeschakeld. In tegenstelling tot StaticResource is een ontbrekende sleutel geen fout en wordt er geen uitzondering gegenereerd.
Notitie
De aard van de DynamicResource-markeringsuitbreiding legt een kleine prestatiestraf op voor uw toepassing. Hoewel u DynamicResource kunt gebruiken in plaats van StaticResource op uw XAML-pagina's, moet u verwijzen naar de staticResource-markeringsextensie als een resource niet verandert.
Als u de bijgewerkte achtergrondkleur uit het eerdere voorbeeld wilt gebruiken, kunt u de DynamicResource als volgt toepassen in uw XAML-code:
<ContentPage ...>
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
<StackLayout BackgroundColor="{DynamicResource PanelBackgroundColor}">
...
</StackLayout>
</ContentPage>
Als de waarde van de Resource PanelBackgroundColor wordt gewijzigd, wordt de waarde backgroundColor van het besturingselement StackLayout automatisch bijgewerkt.