Lightswitch Tip#1 (ADV): custom control extension

Sicuramente una delle feature molto apprezzate di Lightswitch è la possibilità di creare proprie estensioni. E’ utile capire tuttavia come queste funzionano.

In primo luogo occorre specificare che un custom control è suddiviso in due componenti distinte:

  • L’implementazione del controllo, caratteristica che utilizza l’utente finale
  • La descrizione del controllo, che ne definisce le caratteristiche usate a design-time da Lightswitch.

Con questo post vorrei sottolineare come le due parti siano completamente disgiunte.
Il file di descrizione (lsml) viene usato dall’IDE di Lightswitch per presentare al developer un plus del controllo stesso, il suo comportamento, le sue proprietà, la sua struttura… in generale tutto quello che viene passato all’implementazione del controllo tramite IContentItem.
Guardate il seguente esempio:

<Control Name="ColumnChart"
  SupportedContentItemKind="Collection"
  ChildView="ChartSeriesCollection"           
  DesignerImageResource="SindControls.Charts.ColumnChart::ColumnChartImage">
  <Control.Attributes>
    <DisplayName Value="ColumnChart" />
  </Control.Attributes>
  <Control.SupportedDataTypes>
  </Control.SupportedDataTypes>
</Control>

<Control Name="ChartSeriesCollection"
  SupportedContentItemKind="Group"
  ParentView="ColumnChart"
  ChildView="ChartSeries"
  IsHidden="True"
  DesignerImageResource="SindControls.Charts.ColumnChart::SeriesCollectionImage">
  <Control.Attributes>
    <DisplayName Value="Series Collection"/>
  </Control.Attributes>
</Control>

<Control Name="ChartSeries"
  SupportedContentItemKind="Value"
  ParentView="ChartSeriesCollection"
  DesignerImageResource="SindControls.Charts.ColumnChart::SeriesImage">
  <Control.Attributes>
    <DisplayName Value="Series"/>
  </Control.Attributes>
  <Control.SupportedDataTypes>
    <SupportedDataType DataType=":Double"/>
    <SupportedDataType DataType=":Decimal"/>
    <SupportedDataType DataType=":Int16"/>
    <SupportedDataType DataType=":Int32"/>
    <SupportedDataType DataType=":Int64"/>
  </Control.SupportedDataTypes>
</Control>

In questo caso potreste aspettarvi la definizione via codice di 3 controlli, ColumnChart, ChartSeriesCollection and ChartSeries… beh, non è vero! Smile

Nel mio caso ho implementato solo il controllo ColumnChart. Il designer time prenderà in considerazione la tipologia dei figli, le proprietà, i tipi supportati e altro. Il mio controllo utilizzerà queste informazioni recuperandole da IContentItem.ChildItems nelle modalità e tempi in cui ritiene opportuno.

, ,

  1. Lascia un commento

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: