Udostępnij za pośrednictwem


Dostosowywanie narzędzia elementu

W niektórych definicji DSL jednolitej koncepcji reprezentowały grupy elementów.Na przykład jeśli tworzysz model, w którym składnik został ustalony zbiór portów, zawsze ma porty, które ma zostać utworzony w tym samym czasie jako ich składnika nadrzędnego.W związku z tym należy dostosować narzędzia tworzenia elementu tak, aby go tworzy grupę elementów, zamiast tylko jednego.Aby to osiągnąć, można dostosować, jak narzędzie do tworzenia elementu jest zainicjowany.

Można także zastąpić, co się dzieje, gdy narzędzie zostanie przeciągnięty na diagram lub element.

Dostosowywanie zawartości jest narzędziem elementu

Każdy element narzędzie zapisuje wystąpienie ElementGroupPrototype (EPZ), który zawiera szeregowany wersji elementów modelu lub łącza.Domyślnie EPZ narzędzie element zawiera jedno wystąpienie klasy, określony dla narzędzia.Można to zmienić nadrzędnym YourLanguageToolboxHelper.CreateElementToolPrototype.Metoda ta jest wywoływana po załadowaniu pakiet DSL.

Parametr metody jest identyfikator klasy, określone w definicji DSL.Po wywołaniu metody z klasy, który Cię interesuje, można dodać dodatkowych elementów w EPZ.

EPZ musi zawierać osadzanie łączy z jednym z głównych elementów do elementów pomocniczych.Może również zawierać odwołanie łącza.

Poniższy przykład tworzy główny element i dwa elementy osadzone.Główna klasa nazywa się opornikiem i posiada dwie relacje osadzania do elementów o nazwie terminalu.Właściwości roli osadzania noszą nazwy Terminal1 i Terminal2 i mają mnożenia 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);
  }
}

Zobacz też

Koncepcje

Dostosowywanie tworzenia elementu i przepływu