All'interno dello script precedente abbiamo visto come i contenuti possono adattarsi e riempire tutto lo spazio disponibile offerto dalla griglia contenitore, scegliendo il controllo AdaptiveGridViewControl, anche durante il ridimensionamento della finestra. Tuttavia, uno degli effetti collaterali del metodo scelto era quello dell'aspect ratio: non viene mantenuto durante il resize.
Per mantenere anche l'aspect ratio, bisogna eliminare l'impostazione della proprietà ItemHeight vista nel precedente script. Nonostante questo, è comunque richiesto un controllo contenitore che vada a creare la logica di scaling per l'ItemTemplate scelto, per questo esistono due alternative:
- il controllo ViewBox: i contenuti scalano in modo lineare al variare di altezza e larghezza, causando un effetto di zoom, come mostrato nell'esempio seguente...
<DataTemplate x:Key="MyTemplate"> <Viewbox> <Grid Height="200" Width="200"> <Image Source="{Binding ImageUrl}" Stretch="UniformToFill"/> </Grid> </Viewbox> </DataTemplate>
oppure...
- il set manuale dei parametri di altezza e larghezza al variare del resize tramite il metodo MeasureOverride:
public class AspectContentControl : ContentControl { protected override Size MeasureOverride(Size availableSize) { return new Size(availableSize.Width, availableSize.Height * 2); } }
<DataTemplate x:Key="MyTemplate"> <local:AspectContentControl> <!-- ... --> </local:AspectContentControl> </DataTemplate>
In entrambi i casi viene mantenuto l'aspect ratio, anche se il secondo metodo, essendo più "manuale", consente un maggior controllo sui singoli elementi da visualizzare.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare il versioning con i controller di ASP.NET Core Web API
Reactive form tipizzati con FormBuilder in Angular
Potenziare Azure AI Search con la ricerca vettoriale
Utilizzare il trigger SQL con le Azure Function
Creare gruppi di client per Event Grid MQTT
Cambiare la chiave di partizionamento di Azure Cosmos DB
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Elencare le container images installate in un cluster di Kubernetes
Eseguire attività basate su eventi con Azure Container Jobs
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Usare lo spread operator con i collection initializer in C#
I più letti di oggi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2
- Annunciato Silverlight 4 RC e Windows Phone Developer Tools
- Speciale Razor: il nuovo view engine di WebMatrix e ASP.NET MVC
- Speciale Windows Store app: costruire app con WinRT per Windows 8
- Gestire lo stato all'interno di un class component di ReactJS
- Inserimenti bulk su database con la classe SqlBulkCopy di ADO.NET 2.0
- disponibile su MSDN la versione RTM di #VS2013 Update 2! https://aspit.co/auj #msTechEd