WinRT è un Framework relativamente giovane e, anche se nato dall'esperienza maturata con WPF, ha perso alcune comode proprietà di quest'ultimo.
Una delle feature sncanti è la possibilità di tagliare il contenuto che fuoriesce dal suo contenitore.
In pratica, si tratta di una tecnica che permette di impostare la proprietà Clip di un oggetto, creando una RectangleGeometry con le esatte dimensioni dello stesso.
namespace MyCodeNamespace { public class Clip { public static bool GetToBounds(DependencyObject depObj) { return (bool)depObj.GetValue(ToBoundsProperty); } public static void SetToBounds(DependencyObject depObj, bool clipToBounds) { depObj.SetValue(ToBoundsProperty, clipToBounds); } public static readonly DependencyProperty ToBoundsProperty = DependencyProperty.RegisterAttached("ToBounds", typeof(bool), typeof(Clip), new PropertyMetadata(false, OnToBoundsPropertyChanged)); private static void OnToBoundsPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { FrameworkElement fe = d as FrameworkElement; if (fe != null) { ClipToBounds(fe); fe.Loaded += new RoutedEventHandler(fe_Loaded); fe.SizeChanged += new SizeChangedEventHandler(fe_SizeChanged); } } private static void ClipToBounds(FrameworkElement fe) { if (GetToBounds(fe)) { fe.Clip = new RectangleGeometry() { Rect = new Rect(0, 0, fe.ActualWidth, fe.ActualHeight) }; } else { fe.Clip = null; } } static void fe_SizeChanged(object sender, SizeChangedEventArgs e) { ClipToBounds(sender as FrameworkElement); } static void fe_Loaded(object sender, RoutedEventArgs e) { ClipToBounds(sender as FrameworkElement); } } }
Il cuore di tutto lo script è il metodo ClipToBounds, dove viene creata la RectangleGeometry. L'utilizzo del codice è semplicissimo, grazie alla creazione dell'attached property ToBounds.
<Border myNameSpace:Clip.ToBounds="true"> ... </Border>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Utilizzare un service principal per accedere a Azure Container Registry
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Implementare il throttling in ASP.NET Core
Creazione di plugin per Tailwind CSS: espandere le funzionalità del framework dinamicamente
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Limitare le richieste lato server con l'interactive routing di Blazor 8
Code scanning e advanced security con Azure DevOps
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Usare le variabili per personalizzare gli stili CSS