Używanie i aktualizowanie zasobów dynamicznych
- 5 min
W poprzedniej lekcji zdefiniowano zasób w języku Extensible Application Markup Language (XAML) i użyto go jako wartości statycznej. Jednak w niektórych przypadkach usługa StaticResource nie jest odpowiednia. Rozważ następujące scenariusze:
Załóżmy, że chcesz zaimplementować motywy kolorów, które umożliwiają użytkownikowi zmianę wyglądu aplikacji w czasie wykonywania. Rozszerzenie znaczników StaticResource wykonuje wyszukiwanie w słowniku tylko raz, więc nie może dynamicznie aktualizować interfejsu użytkownika.
Preferencje użytkownika są przechowywane na serwerze internetowym i ładują je po uruchomieniu aplikacji. Rozszerzenie znaczników StaticResource zgłasza wyjątek, jeśli klucz nie zostanie znaleziony w słowniku.
W tej lekcji pokazano, jak rozwiązywać problemy, takie jak te przy użyciu zasobów dynamicznych.
Jak aktualizować zasoby w czasie wykonywania
Zasoby są przechowywane w słowniku zasobów. Możesz napisać kod, aby zaktualizować te zasoby w czasie wykonywania. Możesz nawet dodać nowe zasoby lub usunąć istniejące zasoby.
Rozważmy następujący przykład:
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
Załóżmy, że chcesz zmienić wartość zasobu PanelBackgroundColor podczas działania aplikacji. Aby uzyskać dostęp do właściwości Resources , możesz dodać kod do pliku za pomocą kodu dla strony. Poniższy przykład aktualizuje wartość zasobu z poprzedniego przykładu XAML na inny kolor.
this.Resources["PanelBackgroundColor"] = Colors.Green;
Co to jest DynamicResource?
DynamicResource to kolejne rozszerzenie znaczników do wyszukiwania zasobów w słowniku zasobów. Jest on podobny do staticResource w tym, że wykonuje wyszukiwanie słownika podczas tworzenia obiektu docelowego. Jednak nasłuchuje również zmian w zasobie w słowniku. Jeśli wartość zasobu w słowniku ulegnie zmianie, usługa DynamicResource automatycznie aktualizuje interfejs użytkownika.
DynamicResource ma przewagę nad staticResource. Jeśli parametr DynamicResource nie może znaleźć klucza w słowniku, właściwość nie zostanie ustawiona. W przeciwieństwie do elementu StaticResource brak klucza nie jest błędem i nie zgłasza wyjątku.
Uwaga
Charakter rozszerzenia dynamicResource mark-up nakłada niewielką karę za wydajność aplikacji. Mimo że możesz użyć elementu DynamicResource zamiast staticResource na stronach XAML, jeśli zasób nie ulegnie zmianie, należy odwołać się do niego z rozszerzeniem znaczników StaticResource.
Aby użyć zaktualizowanego koloru tła z wcześniejszego przykładu, możesz zastosować element DynamicResource w kodzie XAML w następujący sposób:
<ContentPage ...>
<ContentPage.Resources>
<Color x:Key="PanelBackgroundColor">Blue</Color>
</ContentPage.Resources>
<StackLayout BackgroundColor="{DynamicResource PanelBackgroundColor}">
...
</StackLayout>
</ContentPage>
Jeśli wartość zasobu PanelBackgroundColor zmieni się, wartość BackgroundColor kontrolki StackLayout zostanie zaktualizowana automatycznie.
Test wiedzy
Opinia
Czy ta strona była pomocna?
Nie
Potrzebujesz pomocy dotyczącej tego tematu?
Chcesz spróbować użyć asystenta Ask Learn, aby wyjaśnić ten temat lub uzyskać instrukcje, które go dotyczą?