Specificare una proprietà come ContentProperty di un controllo Silverlight 3.0

di Alessio Leoncini, in Silverlight 3.0,

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:

C#
[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);
    }
  }
}

XAML
<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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

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