Använda och uppdatera dynamiska resurser

Slutförd

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.

Kunskapstest

1.

Vilken funktion tillhandahåller en DynamicResource som inte gör det StaticResource ?