2017-05-24 4 views
0

DSLでこのコードを実装しようとすると問題が発生します。DSLのInitializeDecoratorsでTextDecoratorsを更新すると、誰かがstackoverflow例外を経験しましたか?

protected override void InitializeDecorators(IList<ShapeField> shapeFields, IList<Decorator> decorators) 
    { 
     base.InitializeDecorators(shapeFields, decorators); 

     var nameField = (TextField)ShapeElement.FindShapeField(shapeFields, "NameDecorator"); 

     if (nameField != null) 
     { 
      nameField.DefaultMultipleLine = true; 
      nameField.DefaultAutoSize = false; 

      nameField.AnchoringBehavior.Clear(); 
      nameField.AnchoringBehavior.SetLeftAnchor(AnchoringBehavior.Edge.Left, 0); 
      nameField.AnchoringBehavior.SetRightAnchor(AnchoringBehavior.Edge.Right, 0); 
      nameField.AnchoringBehavior.SetTopAnchor(nameField, AnchoringBehavior.Edge.Top, 0); 
      nameField.AnchoringBehavior.SetBottomAnchor(AnchoringBehavior.Edge.Bottom, 0); 
     } 
    } 

これは基本的にここにあるMicrosoftのドキュメントからコピーして貼り付けられます:

ShapeField.AnchoringBehavior Property

私は私の解決策とVisual Studioでテンプレートとして提供され、最小限の言語バージョンの両方でこれを試してみました、上記のコードを含む以外のカスタマイズはありません。

それはリターンに次のような方法で、次のNamePropertyHandlerクラスにDomainClasses.csで生成されたコードで何が起こっているようだ。私は困惑しています

/// <summary> 
     /// Gets a strongly-typed value of the property on specified element. 
     /// </summary> 
     /// <param name="element">Element which owns the property.</param> 
     /// <returns>Property value.</returns> 
     public override sealed global::System.String GetValue(BaseActivityBase element) 
     { 
      if (element == null) throw new global::System.ArgumentNullException("element"); 
      return element.namePropertyStorage; 
     } 

、これは両方で起こっているので、最小限の言語バージョンと私自身は、もっと大きなことが起こっていると感じています。

他に誰かがこれに問題があり、回避策などがありますか?

+1

あなたがリンクされてきたし、あなたのコードは、例は、2つの別々のフィールドで動作しているようだということである例との主な違いでなければなりません。あなたの場合、1つのフィールドで作業しようとしています。これは、私が 'nameField.AnchoringBehavior.SetTopAnchor(nameField、AnchoringBehavior.Edge.Top、0);'がここのどこかに関与すると思わせるものです。 –

+0

あなたは感謝していますDamien私はアンカーの動作でネームフィールドを渡す過負荷の使用が原因だと思う、私は気づいていない、別の目のペアを持っていい...私はそれを見て戻ってきます – Lyon

答えて

0

私のコピーの愚かさに問題がありました...名前を渡していたオーバーロードが再帰的な問題を引き起こしていました。

nameField.AnchoringBehavior.SetTopAnchor(nameField, AnchoringBehavior.Edge.Top, 0); 

nameField.AnchoringBehavior.SetTopAnchor(AnchoringBehavior.Edge.Top, 0); 
関連する問題