Articoli con tag tip
Lightswitch Tip#1 (ADV): custom control extension
Pubblicato da sierrodc in LightSwitch il settembre 25, 2011
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!
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.