La proprietà Background di Panel, Control, ecc.. è un oggetto di tipo Brush. Nel runtime abbiamo a disposizione diverse sue implementazioni
- SolidColorBrush
- LinearGradientBrush
- RadialGradientBrush
- ImageBrush
- VideoBrush
- WebBrowserBrush
che possiamo usare per 'riempire' un altro oggetto rispettivamente con un colore uniforme, un gradiente lineare, un gradiente radiale, una immagine, un video e una pagina HTML.
Nella necessità di valorizzare tale proprietà attraverso una espressione di binding, ad esempio nel caso in cui l'URL di una immagine da inserire come sfondo provenga da un database, abbiamo la necessità di convertire tale URL in un oggetto di tipo ImageBrush.
Possiamo fare questa operazioni con un converter:
public class ImageUriToImageBrushConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { string path = string.Empty; if (!String.IsNullOrEmpty((string)value)) path = (string)value; var image = new BitmapImage(new Uri(path, UriKind.RelativeOrAbsolute)); var imageBrush = new ImageBrush { ImageSource = image, Stretch = Stretch.UniformToFill }; return imageBrush; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
Il converter utilizza l'URL per creare un'istanza di BitmapImage, oggetto da utilizzare come ImageSource dell'ImageBrush da far restituire al metodo.
Una volta registrato il converter come di consueto, possiamo mettere in binding la nostra proprietà che espone l'URL dell'immagine sotto forma di string.
<Grid Background="{Binding BackgroundUrl, Converter={StaticResource ImageUriToImageBrushConverter}}" Width="200" Height="100" />
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Miglioramenti nelle performance di Angular 16
Supportare la sessione affinity di Azure App Service con Application Gateway
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Definire stili a livello di libreria in Angular
Usare le navigation property in QuickGrid di Blazor
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Ordinare randomicamente una lista in C#
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
I più letti di oggi
- Chiamare direttamente un numero di telefono con HTML5
- Microsoft Security Bulletin MS07-042, MS07-043, MS07-044, MS07-045, MS07-046, MS07-047, MS07-048, MS07-049, MS07-050
- Proteggersi dagli attacchi di Open Redirect in ASP.NET Core MVC
- Utilizzare il metodo IntersectBy per eseguire l'intersection di due liste