Använda och uppdatera dynamiska resurser
I föregående lektion definierade du en resurs i XAML (Extensible Application Markup Language) och använde den som ett statiskt värde. Det finns dock vissa fall där StaticResource inte är lämpligt. Föreställ dig följande scenarier:
Anta att du vill implementera färgteman som låter användaren ändra appens utseende vid körning. Påläggstillägget StaticResource gör bara ordlistesökningen en gång, så det kan inte uppdatera användargränssnittet dynamiskt.
Du lagrar användarinställningar på en webbserver och läser in dem när programmet startar. Påläggstillägget StaticResource utlöser ett undantag om nyckeln inte finns i ordlistan.
Den här lektionen visar hur du hanterar problem som dessa med hjälp av dynamiska resurser.
Så här uppdaterar du resurser vid körning
Du lagrar resurser i en resursordlista. Du kan skriva kod för att uppdatera dessa resurser vid körning. Du kan till och med lägga till nya resurser eller ta bort befintliga resurser.
Ta följande som exempel:
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
Anta att du vill ändra värdet för Resursen PanelBackgroundColor medan programmet körs. Du kan lägga till kod i filen bakom koden för sidan för att få åtkomst till egenskapen Resurser . I följande exempel uppdateras resursvärdet från föregående XAML-exempel till en annan färg.
this.Resources["PanelBackgroundColor"] = Colors.Green;
Vad är DynamicResource?
DynamicResource är ett annat tillägg för att söka efter resurser i en resursordlista. Det liknar StaticResource eftersom det gör en ordlistesökning när målobjektet skapas. Men den lyssnar också efter ändringar i resursen i ordlistan. Om resursvärdet i ordlistan ändras uppdaterar DynamicResource automatiskt användargränssnittet.
DynamicResource har en fördel jämfört med StaticResource. Om DynamicResource inte kan hitta nyckeln i ordlistan lämnar den egenskapen oet. Till skillnad från StaticResource är en nyckel som saknas inte ett fel och det utlöser inget undantag.
Kommentar
Typen av DynamicResource-tillägg medför en liten prestandapåföljd för ditt program. Även om du kan använda DynamicResource i stället för StaticResource på dina XAML-sidor bör du referera till den med Tillägget StaticResource-pålägg om en resurs inte ändras.
Om du vill använda den uppdaterade bakgrundsfärgen från det tidigare exemplet kan du använda DynamicResource i XAML-koden så här:
<ContentPage ...>
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
<StackLayout BackgroundColor="{DynamicResource PanelBackgroundColor}">
...
</StackLayout>
</ContentPage>
Om värdet för Resursen PanelBackgroundColor ändras uppdateras värdet BackgroundColor för StackLayout-kontrollen automatiskt.