요소 도구 사용자 지정

일부 DSL 정의의 개념을 하나의 요소 그룹으로 나타냅니다.예를 들어,는 구성 요소는 고정된 포트 집합을 가진 모델을 만들 경우 해당 상위 구성 요소와 같은 시간에 만들어진 포트 항상 합니다.따라서 요소 하나가 아니라 그룹을 만들 수 있도록 요소 만들기 도구를 사용자 지정 해야 합니다.이 위해서는 요소 만들기 도구 초기화 되는 방식을 사용자 지정할 수 있습니다.

도구 다이어그램 또는 요소를 끌 때 수행 되는 작업을 재정의할 수도 있습니다.

콘텐츠 요소의 도구 사용자 지정

각 요소의 도구 인스턴스를 저장 된 ElementGroupPrototype 모델 요소 및 링크를 한 개 이상 serialize 된 버전을 포함 (EGP).기본적으로, EGP 요소 도구를 하는 도구를 지정 하는 클래스의 인스턴스를 하나 포함 되어 있습니다.재정의 하 여이 변경할 수 있습니다 YourLanguageToolboxHelper.CreateElementToolPrototype.이 메서드는 DSL 패키지를 로드할 때 호출 됩니다.

메서드 매개 변수는 DSL 정의에 지정 된 클래스의 ID입니다.관심 있는 클래스와 메서드가 호출 되 면 EGP로 추가 요소를 추가할 수 있습니다.

EGP는 주 요소에서 링크 요소를 자회사를 포함 포함 해야 합니다.참조 링크를 포함할 수도 있습니다.

다음은 기본 요소와 포함 된 요소가 두 개를 만듭니다.저항기, 기본 클래스 호출 되며 포함 관계 두 터미널에 명명 된 요소에 있습니다.Terminal1 및 terminal2를 포함 역할 속성 명명 되며 모두는 복합성이 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);
  }
}

참고 항목

개념

요소 만들기 및 이동 사용자 지정