Adicionando propriedades personalizadas a um diagrama de camada

Este pacote de recursos de 2010 de Visual Studio permite que você definir propriedades personalizadas para os elementos em diagramas de camada em Visual Studio 2010 Ultimate. Você pode fazer com que essas propriedades aparecem na Propriedades janela, para que os usuários podem ver e editá-los. Para obter mais informações, consulte Pacotes de funcionalidades de Visual Studio.

Elementos de camada (ILayerElement) têm várias propriedades padrão como Name e Description. Essas propriedades podem ser editadas pelo usuário na Propriedades janela e também pode ser lido e atualizados pelo seu código de programa.

Você pode definir suas próprias propriedades que podem ser associadas a qualquer elemento de camada. A maneira mais simples de fazer isso é adicionar valores para o Properties dicionário anexado para cada ILayerElement. Isso pode ser suficiente se você quiser usar as propriedades em seu próprio código de programa.

No entanto, definindo uma propriedade personalizada, você pode tornar um valor adicional visível ao usuário na Propriedades janela. Um descritor de propriedade personalizada é uma classe que herda de PropertyExtension<T> onde T é ILayerElement ou uma de suas classes derivadas. Té o tipo para o qual a propriedade é definida.

Por exemplo, você pode definir propriedades nos seguintes tipos:

  • ILayerModel-modelo

  • ILayer-cada camada.

  • ILayerDependencyLink-os vínculos entre camadas

  • ILayerComment

  • ILayerCommentLink

O código a seguir é um descritor de propriedade personalizada típica. Ele define uma propriedade booleana no modelo de camada (ILayerModel) que permite que o usuário fornecer valores para um método de validação personalizada.

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;
      }
    }
  }
}

Consulte também

Outros recursos

Criando extensões para diagramas de camada