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
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Accesso sicuro ai secrets attraverso i file in Azure Container Apps
Reactive form tipizzati con FormBuilder in Angular
Usare lo spread operator con i collection initializer in C#
Code scanning e advanced security con Azure DevOps
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Usare un KeyedService di default in ASP.NET Core 8
Eseguire i worklow di GitHub su runner potenziati
Utilizzare gRPC su App Service di Azure
Evitare la script injection nelle GitHub Actions
Load test di ASP.NET Core con k6
I più letti di oggi
- Migliorare la scalabilità delle Azure Function con il Flex Consumption
- Accettare un tipo nativo nel body di una richiesta a ASP.NET Web API
- Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
- Chiamare direttamente un numero di telefono con HTML5
- Utilizzare la direttiva ngIf di Angular per renderizzare o meno template HTML