Personalizar herramientas de elementos

En algunas definiciones ADSL, se representa un único concepto como grupo de elementos.Por ejemplo, si crea un modelo en el que un componente tiene un conjunto fijo de puertos, desea siempre los puertos que se van al mismo tiempo que el componente primario.Por consiguiente, tiene que personalizar la herramienta de creación del elemento para que cree un grupo de elementos en lugar de solo uno.Para ello, puede personalizar cómo se inicializa la herramienta de creación de elemento.

También puede reemplazar lo que pasa cuando la herramienta se arrastra al diagrama o un elemento.

Personalizar el contenido de una herramienta de elementos

Cada herramienta de elementos almacena una instancia de ElementGroupPrototype (EGP), que contiene una versión serializada de uno o más elementos y vínculos modelos.De forma predeterminada, el EGP de una herramienta de elementos contiene una instancia de la clase que especifique para la herramienta.Puede cambiar esto reemplazando TheLanguageToolboxHelper.CreateElementToolPrototype.Se llama a este método cuando el paquete ADSL se carga.

Un parámetro del método es el identificador de la clase especificada en la definición del ADSL.Cuando se llama al método con la clase que le interesa, puede agregar elementos adicionales en el EGP.

El EGP debe incluir vínculos de incrustación a partir de un elemento principal a los elementos secundarios.También puede incluir vínculos de referencia.

El ejemplo siguiente se crea un elemento principal y dos elementos insertados.La clase principal se denomina Resistor, y dos relaciones que insertan a los elementos denominados Terminal.De las propiedades de incrustación el rol se denomina Terminal1 y Terminal2, y tienen una multiplicidad de 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);
  }
}

Vea también

Conceptos

Personalizar la creación y el movimiento de los elementos