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
Eseguire i worklow di GitHub su runner potenziati
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Creare una libreria CSS universale: Cards
Escludere alcuni file da GitHub Secret Scanning
Sostituire la GitHub Action di login su private registry
Triggerare una pipeline su un altro repository di Azure DevOps
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Assegnare un valore di default a un parametro di una lambda in C#
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Generare un hash con SHA-3 in .NET
Definire stili a livello di libreria in Angular