Partager via


Personnalisation d'outils d'éléments

Dans quelques définitions DÉSOLÉ, vous représentez un concept unique en tant que groupe d'éléments. Par exemple, si vous créez un modèle dans lequel un composant a un jeu fixe de ports, vous pouvez souhaiter encore que les ports à créer en même temps que leur composant parent. Par conséquent, vous devez personnaliser l'outil de création d'éléments afin qu'il crée un groupe d'éléments au lieu d'un. Pour ce faire, vous pouvez personnaliser la façon dont l'outil de création d'éléments est initialisé.

Vous pouvez également substituer ce qui se produit lorsque l'outil est déplacé vers le diagramme ou un élément.

personnaliser le contenu d'un outil d'élément

chaque outil d'élément enregistre une instance d' ElementGroupPrototype (EGP), qui contient une version sérialisée d'un ou plusieurs éléments de modèle et liens. par défaut, l'EGP d'un outil d'élément contient une instance de la classe que vous spécifiez pour l'outil. Vous pouvez modifier cela en substituant YourLanguageToolboxHelper.CreateElementToolPrototype. Cette méthode est appelée lorsque le package DÉSOLÉ est chargé.

Un paramètre de la méthode est l'ID de la classe que vous avez spécifié dans la définition de langage spécifique à un domaine. Lorsque la méthode est appelée avec la classe qui vous intéresse, vous pouvez ajouter des éléments supplémentaires dans l'EGP.

L'EGP doit inclure des liens d'incorporation d'un élément principal vers des éléments auxiliaires. Il peut également inclure des liens de la référence.

l'exemple suivant crée un élément principal et deux éléments incorporés. La classe principale est appelée Resistor, et elle possède deux relations incorporantes aux éléments nommés Terminal. Le rôle de propriétés d'incorporation sont nommés Terminal1 et Terminal2, et ont une multiplicité 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);
  }
}

Voir aussi

Concepts

Personnalisation de la création et du mouvement des éléments