Condividi tramite


Personalizzazione di strumenti di elemento

In alcune definizioni DSL, rappresenta un singolo concetto come gruppo di elementi.Ad esempio, se si crea un modello in cui un componente dispone di un set fisso di porte, è sempre le porte da creare contemporaneamente al componente padre.Pertanto, è necessario personalizzare lo strumento di creazione elementi in modo che l'oggetto crei un gruppo di elementi anziché uno.A tale scopo, è possibile personalizzare come strumento di creazione dell'elemento viene inizializzato.

È inoltre possibile eseguire l'override di quello che si verifica quando lo strumento viene trascinato nel diagramma o in un elemento.

Personalizzare il contenuto di uno strumento dell'elemento

Ogni strumento dell'elemento contiene un'istanza di un oggetto ElementGroupPrototype (EGP), che contiene una versione serializzata di uno o più elementi del modello e collegamenti.Per impostazione predefinita, il EGP di uno strumento dell'elemento contiene un'istanza della classe specificata per lo strumento.È possibile modificare questo override TheLanguageToolboxHelper.CreateElementToolPrototype.Questo metodo viene chiamato quando il pacchetto DSL viene caricato.

Un parametro del metodo è l'ID di classe specificati nella definizione di modello DSL.Quando il metodo viene chiamato dalla classe in questione, è possibile aggiungere elementi aggiuntivi in EGP.

Il EGP necessario includere incorporare i collegamenti da un elemento principale agli elementi sussidiari.Sono inoltre inclusi i collegamenti ai riferimenti.

Nell'esempio seguente viene creato un elemento principale e due elementi incorporati.La classe principale è denominata Resistor e di due relazioni incorporare gli elementi denominati Terminal.Il ruolo l'inserimento delle proprietà è denominato Terminal1 e Terminal2 e dispongono di una molteplicità di 1..1.

using Microsoft.VisualStudio.Modeling; ...  
public partial class CircuitDiagramToolboxHelper
{
  protected override ElementGroupPrototype    CreateElementToolPrototype(Store store, Guid domainClassId)
  {
    // A case for each tool to customize:  
    if (domainClassId == Resistor.DomainClassId)
    {
      // Set up the prototype elements and links:
      Resistor resistor = new Resistor(store);
      resistor.Terminal1 = new Terminal(store); 
      resistor.Terminal2 = new Terminal(store);
      resistor.Terminal1.Name = "T1"; // embedding
      resistor.Terminal2.Name = "T2"; // embedding
      // We could also set up reference links.

      // Create an element group prototype for the toolbox:
      ElementGroup egp = new ElementGroup(store.DefaultPartition);
      egp.AddGraph(resistor, true);
      // We do not have to explicitly include embedded children.
      return egp.CreatePrototype();
    }
    // Element tools for other classes:
    else
      return base.CreateElementToolPrototype(store, domainClassId);
  }
}

Vedere anche

Concetti

Personalizzazione della creazione e dello spostamento di elementi