共用方式為


將自訂屬性加入至圖層圖表

這個 Visual Studio 2010 功能套件可讓您在 Visual Studio 2010 Ultimate 中的圖層圖表上定義項目的自訂屬性。 您可以讓這些屬性出現在 [屬性] 視窗中,好讓使用者可加以查看和編輯。 如需詳細資訊,請參閱 Visual Studio 功能套件

圖層項目 (ILayerElement) 有幾個標準屬性,例如 Name 和 Description。 這些屬性可由使用者在 [屬性] 視窗中編輯,而且也可以由您的程式碼所讀取和更新。

您可以定義可與任何圖層項目有關聯的屬性。 最簡單的方法是將值加入至 Properties 字典 (該字典會附加到每一個 ILayerElement)。 如果您只想要在自己的程式碼中使用屬性,這樣可能就已經足夠。

但是,您可以藉由定義自訂屬性,讓其他值可供使用者在 [屬性] 視窗中看到。 自訂屬性描述元是繼承自 PropertyExtension<T> 的類別,其中 T 是 ILayerElement 或它的其中一個衍生類別。 T 是定義此屬性所針對的型別。

例如,您可以在下列型別上定義屬性:

  • ILayerModel - 模型

  • ILayer - 每一個圖層

  • ILayerDependencyLink - 圖層之間的連結

  • ILayerComment

  • ILayerCommentLink

注意事項注意事項

也有一個更簡單的機制可以隨著任何 ILayerElement 來儲存字串。 您可以將值放入附加至每一個項目的 Properties 字典中。 這對於您不希望使用者直接編輯的資料而言非常實用。 如需詳細資訊,請參閱巡覽及更新程式碼中的圖層模型

範例

下列程式碼是典型的自訂屬性描述元。 它會在圖層模型 (ILayerModel) 上定義布林值屬性,好讓使用者為自訂驗證方法提供值。

using System;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;

namespace MyNamespace
{
  /// <summary>
  /// Custom properties are added to the Layer Designer via a custom
  /// Property Descriptor. We have to export this Property Descriptor
  /// using MEF to make it available in the Layer Designer.
  /// </summary>
  [Export(typeof(IPropertyExtension))]
  public class AllTypesMustBeReferencedProperty 
      : PropertyExtension<ILayerModel>
  {
    /// <summary>
    /// Each custom property must have a unique name. 
    /// Usually we use the full name of this class.
    /// </summary>
    public static readonly string FullName =
      typeof(AllTypesMustBeReferencedProperty).FullName;

    /// <summary>
    /// Construct the property. Notice the use of FullName.
    /// </summary>
    public AllTypesMustBeReferencedProperty()
            : base(FullName)
    {  }

    /// <summary>
    /// The display name is shown in the Properties window.
    /// We therefore use a localizable resource.
    /// </summary>
    public override string DisplayName
    {
      get { return Strings.AllTypesMustBeReferencedDisplayName; }
    }

    /// <summary>
    /// Description shown at the bottom of the Properties window.
    /// We use a resource string for easier localization.
    /// </summary>
    public override string Description
    {
      get { return Strings.AllTypesMustBeReferencedDescription; }
    }

    /// <summary>
    /// This is called to set a new value for this property. We must
    /// throw an exception if the value is invalid.
    /// </summary>
    /// <param name="component">The target ILayerElement</param>
    /// <param name="value">The new value</param>
    public override void SetValue(object component, object value)
    {
      ValidateValue(value);
      base.SetValue(component, value);
    }
    /// <summary>
    /// Helper to validate the value.
    /// </summary>
    /// <param name="value">The value to validate</param>
    private static void ValidateValue(object value)
    {  }

    public override Type PropertyType
    { get { return typeof(bool); } }

    /// <summary>
    /// The segment label of the properties window.
    /// </summary>
    public override string Category
    { 
      get
      {
        return Strings.AllTypesMustBeReferencedCategory;
      }
    }
  }
}

請參閱

其他資源

建立圖層圖表的擴充功能