Definirea și utilizarea resurselor
- 5 minute
O resursă este ca o constantă simbolică dintr-un limbaj de programare. Îl definiți într-un singur loc și faceți referire la el oriunde aveți nevoie. Codul este mai ușor de citit, deoarece utilizați un nume descriptiv în locul unei valori "magice". Dacă trebuie să modificați valoarea, trebuie doar să actualizați definiția.
În acest modul, vedeți cum să utilizați resurse pentru a elimina valorile codificate din limbajul XAML (Extensible Application Markup Language) pe care îl utilizați în interfața de utilizator a aplicației .NET Multi-platform (MAUI).
Ce este o resursă?
O resursă este orice obiect care poate fi partajat în interfața de utilizator. Exemplele cele mai comune sunt fonturile, culorile și dimensiunile. Cu toate acestea, puteți stoca obiecte complexe, cum ar fi stil și OnPlatform instanțe ca resurse.
Definiți o resursă în XAML sau cod. Apoi aplicați-l fie în XAML, fie în cod. De obicei, lucrați complet în XAML, deși vă arătăm câteva cazuri mai târziu, unde codul este util.
Luați în considerare un exemplu. Să presupunem că doriți să utilizați aceeași Culoare text valori în controalele de pe o pagină. Dacă ați utilizat valori codificate cu codare hard, XAML ar arăta astfel. Observați cum se repetă valoarea pentru culoarea textului în cele două controale.
<Label TextColor="Blue" FontSize="14">
<Button TextColor="Blue" FontSize="14">
În loc să repetați culoarea textului, o puteți defini ca resursă. Definiția arată astfel:
<Color x:Key="PageControlTextColor">Blue</Color>
Observați cum elementul definit are o proprietate x:Key care dă resursei un nume. Utilizați această cheie pentru a căuta resursa în XAML.
Înainte de a putea utiliza o resursă, trebuie să o stocați într-un dicționar de resurse.
Ce este ResourceDictionary?
ResourceDictionary este o clasă de bibliotecă .NET MAUI particularizată pentru utilizare cu resurse UI. Este un dicționar, deci stochează perechi cheie/valoare. Tipul cheii este limitat la șir, în timp ce valoarea poate fi orice obiect.
Fiecare pagină .NET MAUI XAML are o proprietate denumită Resources care poate conține un obiect ResourceDictionary. Proprietatea este nulă în mod implicit, deci trebuie să creați o instanță de dicționar înainte de a o putea utiliza. Următorul cod vă arată cum să creați un obiect ResourceDictionary și să-l atribuiți proprietății Resources a unui ContentPage:
<ContentPage.Resources>
<ResourceDictionary>
...
</ResourceDictionary>
</ContentPage.Resources>
.NET MAUI XAML are o sintaxă comodă încorporată care creează automat instanța dicționarului de fiecare dată când începeți să utilizați proprietatea Resources. Exemplul anterior poate fi simplificat cu următorul cod:
<ContentPage.Resources>
...
</ContentPage.Resources>
Fiecare pagină din aplicație poate avea propriul dicționar. Aceste dicționare specifice paginii se utilizează pentru a stoca resurse utilizate exclusiv pe acea pagină.
Notă
Fiecare control de pe o pagină poate avea, de asemenea, propriul dicționar de resurse. De exemplu, puteți adăuga un dicționar de resurse la un control Etichetă astfel:
<Label Text="Hello, World!"
...
<Label.Resources>
...
</Label.Resources>
</Label>
În afară de aspecte și vizualizări, care pot conține elemente fiu, nu este comun să adăugați un dicționar de resurse la nivel de control.
Crearea unei resurse
Pentru a crea o resursă, o declarați în interiorul proprietății Resurse pentru o pagină. Următorul exemplu creează resursa de culori text descrisă anterior
<ContentPage.Resources>
<Color x:Key="PageControlTextColor">Blue</Color>
</ContentPage.Resources>
Atunci când selectați o cheie pentru resursă, alegeți un nume care reflectă utilizarea, nu valoarea resursei. De exemplu, pentru a seta fundalul unei etichete la Roșu, nu utilizați RedColor ca tastă, utilizați în schimb FundalColor.
Aplicarea unei resurse utilizând StaticResource
staticResource este o extensie de marcaj pentru căutarea resurselor într-un dicționar de resurse. Furnizați cheia resursei, iar extensia marcajului returnează valoarea corespunzătoare. Următorul marcaj XAML afișează un exemplu care creează și utilizează o resursă Color denumită PageControlTextColor. Marcajul XAML pentru controlul etichetă din exemplu utilizează extensia StaticResource marcaj pentru a regăsi valoarea.
<ContentPage.Resources>
<Color x:Key="PageControlTextColor">Blue</Color>
</ContentPage.Resources>
...
<Label TextColor="{StaticResource PageControlTextColor}" ... />
Extensia se numește StaticResource, deoarece extensia este evaluată o singură dată. Căutarea dicționarului are loc atunci când se creează obiectul țintă. Proprietatea țintă nu este actualizată dacă valoarea resursei din dicționar se modifică.
Avertisment
StaticResource generează o excepție la momentul rulării dacă nu se găsește cheia.
Tipuri intrinseci XAML
Exemplul original prezentat la începutul acestei unități setează proprietatea TextColor și proprietatea FontSize:
<Label TextColor="Blue" FontSize="14">
<Button TextColor="Blue" FontSize="14">
Proprietatea FontSize are tipul Dublu . Pentru a crea o resursă pentru această valoare, utilizați unul dintre tipurile intrinseci XAML definite în specificația XAML. Specificația XAML definește numele tipurilor pentru multe dintre tipurile simple C#. Următorul cod arată exemple de resurse pentru fiecare dintre tipurile intrinseci.
<ContentPage.Resources>
<x:String x:Key="...">Hello</x:String>
<x:Char x:Key="...">X</x:Char>
<x:Single x:Key="...">31.4</x:Single>
<x:Double x:Key="...">27.1</x:Double>
<x:Byte x:Key="...">8</x:Byte>
<x:Int16 x:Key="...">16</x:Int16>
<x:Int32 x:Key="...">32</x:Int32>
<x:Int64 x:Key="...">64</x:Int64>
<x:Decimal x:Key="...">12345</x:Decimal>
<x:TimeSpan x:Key="...">1.23:5959</x:TimeSpan>
<x:Boolean x:Key="...">True</x:Boolean>
</ContentPage.Resources>
Setarea valorilor specifice platformei pentru o resursă
Este comun să fie necesar să ajustați ușor interfața de utilizator a aplicației între platforme. Modalitatea standard de a defini valorile specifice platformei este să utilizați un OnPlatform obiect atunci când definiți o resursă. De exemplu, următorul cod vă arată cum să creați o resursă care face referire la diferite culori de text pe iOS, Android, macOS (Mac Catalyst) și Windows (WinUI).
<ContentPage.Resources>
<OnPlatform x:Key="textColor" x:TypeArguments="Color">
<On Platform="iOS" Value="Silver" />
<On Platform="Android" Value="Green" />
<On Platform="WinUI" Value="Yellow" />
<On Platform="MacCatalyst" Value="Pink" />
</OnPlatform>
</ContentPage.Resources>
...
<Label TextColor="{StaticResource textColor}" ... />