將自訂屬性加入至圖層圖表
這個 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;
}
}
}
}