Nella creazione di un controllo personalizzato, possiamo definire le proprietà come DependencyProperty in modo che possano essere utilizzate, ad esempio, dall'engine di data binding.
Tali proprietà dispongono di un sistema di notifica per le variazioni che avvengono al valore della proprietà stessa, possiamo sfruttare queste caratteristiche per fare in modo che le informazioni inserite come Content del controllo vengano gestite dal controllo stesso ed utilizzate secondo una logica personalizzata.
Attraverso l'attributo ContentProperty (ContentPropertyAttribute) possiamo impostare quale proprietà conterrà il valore degli oggetti definiti come Content nel markup del nostro controllo di esempio:
[ContentProperty("DescriptionText")] public partial class MyControl : UserControl { public static readonly DependencyProperty DescriptionTextProperty = DependencyProperty.Register("DescriptionText", typeof(TextBlock), typeof(MyControl), new PropertyMetadata(DescriptionTextChanged)); public TextBlock DescriptionText { get { return (TextBlock)this.GetValue(MyControl.DescriptionTextProperty); } set { this.SetValue(MyControl.DescriptionTextProperty, value); } } private static void DescriptionTextChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { TextBlock t = ((TextBlock)e.NewValue); Inline[] i = new Inline[t.Inlines.Count]; t.Inlines.CopyTo(i, 0); foreach (var item in i) { t.Inlines.Remove(item); ((MyControl)sender).descriptionText.Inlines.Add(item); } } }
<local:MyControl> <TextBlock> <Run Text="ASPItalia.com" /> <LineBreak /> <Run Text="SilverlightItalia.com" /> </TextBlock> </local:MyControl>
Nel nostro UserControl MyControl, la proprietà DescriptionText gestisce un oggetto di tipo TextBox impostato nel markup del controllo. Attraverso il metodo DescriptionTextChanged possiamo recuperare l'oggetto e trasferirne le informazioni o le altre proprietà ad un altro controllo interno dall'UserControl, collocato nella nostra grafica personalizzata.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Eseguire una chiamata AJAX per inviare dati al server in Angular 2
- Formati per l'impostazione del colore in CSS3
- .NET Conference Italia 2024 - Milano
- Gestione CSS in Blazor con .NET 9
- build 7712 per #wp7 #mango riservata agli sviluppatori, con refresh dei tool su connect. info su http://aspitalia.com/y6
- oggi a partire dalle 16:00, non perdere #connect. tutto sul futuro di #vs, #azure, #aspnet https://aspit.co/azk