Il template di un'applicazione Blazor prevede un menù laterale con sfondo viola e il contenuto all'interno di pagine con sfondo bianco, un accomppiamento che può non essere adeguato alle nostre esigenze, o troppo limitato, nel caso in cui volessimo offrire ai nostri utenti la possibilità di cambiare tema. Vediamo dunque come modificare o gestire temi differenti utilizzando il localstorage e CSS.
Il primo passo consiste nel fornire all'utente un metodo per cambiare il tema corrente, possiamo utilizzare controlli checkbox, radio oppure una select, modificando la barra superiore dell'interfaccia, nel file MainLayout.razor, otterremo il seguente risultato
<div class="top-row px-4"> <select class="form-control" @bind="CurrentTheme" style="width:150px; margin: 0 10px;"> <option value="light">Chiaro</option> <option value="dark">Scuro</option> </select> <a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a> </div>
Come si può notare, abbiamo utilizzato una proprietà CurrentTheme, che andremo a definire nella sezione @code della pagina. L'obiettivo è salvare il valore selezionato all'interno del localstorage e recuperarlo al momento del caricamento tramite l'utilizzo di un istanza IJSRuntime e OnInitializedAsync
@inject IJSRuntime jsRuntime @code{ string _currentTheme; string CurrentTheme { get => _currentTheme; set { _currentTheme = value; jsRuntime.InvokeVoidAsync("localStorage.setItem", "theme", _currentTheme); } } protected override async Task OnInitializedAsync() { _currentTheme = await jsRuntime.InvokeAsync<string>("localStorage.getItem", "theme"); await base.OnInitializedAsync(); } }
Completiamo l'implementazione aggiungendo il valore della proprietà CurrentTheme nell'HTML, nella classe del div contenente tutto il layout, e inseriamo il CSS, in wwwroot/css/app.css, che modificherà l'aspetto della pagina in base alla scelta effettuata.
<div class="page @CurrentTheme"> <div class="sidebar"> <NavMenu /> </div> <main> </main> </div>
.page.dark { background-color: rgb(30,30,30); color: #ccc; } .page.dark .top-row { background-color: rgb(25,25,25) !important; border-color: rgb(20,20,20) !important; } .page.dark .sidebar .top-row { background-color: rgb(15,15,15) !important; border-color: rgb(15,15,15) !important; } .page.dark .sidebar { background-image: linear-gradient(180deg, rgb(85,85,85) 0%, rgb(17,17,17) 70%) !important; } .page.dark a, .page.dark .btn-link { color: rgb(143,214,3); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Simulare Azure Cosmos DB in locale con Docker
Utilizzare Container Queries nominali
Eseguire script pre e post esecuzione di un workflow di GitHub
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Hosting di componenti WebAssembly in un'applicazione Blazor static
Creare gruppi di client per Event Grid MQTT
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Creare una libreria CSS universale: Nav menu
Proteggere le risorse Azure con private link e private endpoints
Eseguire una query su SQL Azure tramite un workflow di GitHub
Usare una container image come runner di GitHub Actions
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online