共用方式為


AddRule 類別

表示物件加入至模型時所呼叫的規則。

繼承階層架構

System.Object
  Microsoft.VisualStudio.Modeling.Rule
    Microsoft.VisualStudio.Modeling.AddRule
      Microsoft.VisualStudio.Modeling.Diagrams.CommentShapeAddRule
      Microsoft.VisualStudio.Modeling.Diagrams.NodeShape.ExpandCollapseNodeShapeWhenAddedToDiagramRule
      Microsoft.VisualStudio.Modeling.Diagrams.ParentShapeContainsNestedChildShapesAddRule
      Microsoft.VisualStudio.Modeling.Diagrams.ParentShapeHasRelativeChildShapesAddRule
      Microsoft.VisualStudio.Modeling.Diagrams.ShapeElementAddRule
      Microsoft.VisualStudio.Modeling.ElementDeserializedRule

命名空間:  Microsoft.VisualStudio.Modeling
組件:  Microsoft.VisualStudio.Modeling.Sdk.11.0 (在 Microsoft.VisualStudio.Modeling.Sdk.11.0.dll 中)

語法

'宣告
Public MustInherit Class AddRule _
    Inherits Rule
public abstract class AddRule : Rule

AddRule 型別會公開下列成員。

建構函式

  名稱 說明
受保護的方法 AddRule 初始化 AddRule 類別的執行個體。

回頁首

屬性

  名稱 說明
公用屬性 FireBefore true 如果變更發生預呈現時,就會執行這項規則。 (繼承自 Rule)。
公用屬性 FireImmediately true 如果這項規則將執行立即變更就會發生。 (繼承自 Rule)。
公用屬性 FireOnLocalCommit true 如果目前的交易認可時,就會執行這項規則。 (繼承自 Rule)。
公用屬性 FireOnTopLevelCommit true 如果當最上層交易認可時,就會執行這項規則。 (繼承自 Rule)。
公用屬性 FireTime 取得或設定時應執行的規則。通常,設定 RuleOn 屬性。 (繼承自 Rule)。
公用屬性 IsEnabled 取得或設定是否啟用該規則。預設情況下,通常則為 true,但您可以將它初始化為 false,RuleOn 屬性中。 (繼承自 Rule)。
公用屬性 Priority 取得指派給該規則的優先順序。若要決定在交易結束時執行規則的順序會幫助。 (繼承自 Rule)。

回頁首

方法

  名稱 說明
公用方法 CompareTo(Object) 比較規則套用至另一個物件。 (繼承自 Rule)。
公用方法 CompareTo(Rule) 比較規則套用至另一個規則,透過它們的 Id。 (繼承自 Rule)。
公用方法 ElementAdded 系統會通知的接聽程式已使用的規則。
公用方法 Equals(Object) 驗證規則是否等於另一個物件。 (繼承自 Rule)。
公用方法 Equals(Rule) 驗證規則是否等於另一個規則。 (繼承自 Rule)。
受保護的方法 Finalize 允許物件在記憶體回收進行回收之前,嘗試釋放資源並執行其他清除作業。 (繼承自 Object)。
公用方法 GetHashCode 取得雜湊程式碼的規則。 (繼承自 Rule)。
公用方法 GetType 取得目前執行個體的 Type。 (繼承自 Object)。
受保護的方法 MemberwiseClone 建立目前 Object 的淺層複本 (Shallow Copy)。 (繼承自 Object)。
公用方法 ToString 傳回表示目前物件的字串。 (繼承自 Object)。

回頁首

備註

項目、 關聯性、 圖形、 連接器或圖表加入至模型時,便會觸發這種類型的規則。

A RuleOnAttribute放在類別上的屬性表示何種物件規則適用於,而且應該引發規則的時機。

此規則時,會呼叫指定之型別的物件加入至模型時,是否在 UI 中,或以程式設計方式加入。

從檔案載入時將項目,也會觸發規則。如果您想要避免在回應在這種情況下,這些程式碼加入您的 ElementAdded:

// Ignore this call if we're currently loading a model:
    if (e.ModelElement.Store.TransactionManager
          .CurrentTransaction.IsSerializing) 
       return;

如需詳細資訊與範例,請參閱規則傳播模型內的變更

範例

在下列範例中,規則定義衍生自AddRule。加入至圖表時,此規則會設定圖形的位置。

RuleOn屬性指示的最上層交易認可時,應該引發規則。

[RuleOn(typeof(ParentShapeContainsNestedChildShapes), FireTime = TimeToFire.TopLevelCommit)]
public class ShapeAddedToDiagramRule : AddRule
{
  private double offset = 0.25;
  private PointD location = new PointD(0.25, 0.25);

  public override void ElementAdded(ElementAddedEventArgs e)
  {
    Shape shape = null;
    ParentShapeContainsNestedChildShapes nestedLink = e.ModelElement as ParentShapeContainsNestedChildShapes;
    if (nestedLink != null)
    {
      shape = nestedLink.NestedChildShapes as Shape;
    }

    if (shape != null && shape.Diagram != null)
    {
      // Expand the shape and move it to its new position
      shape.IsExpanded = true;
      shape.Location = new PointD(location.X, location.Y + offset);

      // Adjust the height offset for the size of the shape
      // (I'm assuming that the DefaultContainerMargin
      // provides for a decent spacing between the shapes)
      offset += shape.Size.Height + shape.Diagram.DefaultContainerMargin.Height;
    }
  }
}

執行緒安全

這個型別的任何 Public static (在 Visual Basic 中為 Shared) 成員都具備執行緒安全。不保證任何執行個體成員是安全執行緒。

請參閱

參考

Microsoft.VisualStudio.Modeling 命名空間

其他資源

規則傳播模型內的變更