Partager via


Ajout de propriétés personnalisées à un diagramme de couche

Ce Feature Pack Visual Studio 2010 vous permet de définir des propriétés personnalisées pour des éléments sur les diagrammes de couche dans Visual Studio 2010 Ultimate. Vous pouvez faire en sorte que ces propriétés s'affichent dans la fenêtre Propriétés, afin que les utilisateurs puissent les voir et les modifier. Pour plus d'informations, consultez Packs de fonctionnalités Visual Studio.

Les éléments de couche (ILayerElement) ont plusieurs propriétés standard, telles que Name et Description. Ces propriétés peuvent être modifiées par l'utilisateur dans la fenêtre Propriétés et peuvent également être lues et mises à jour par votre code de programme.

Vous pouvez définir vos propres propriétés qui peuvent être associées à tout élément de couche. Pour ce faire, la méthode la plus simple consiste à ajouter des valeurs au dictionnaire Properties associé à chaque ILayerElement. Cela peut être suffisant si vous souhaitez seulement utiliser les propriétés dans votre propre code de programme.

Toutefois, en définissant une propriété personnalisée, vous pouvez rendre visible une valeur supplémentaire pour l'utilisateur dans la fenêtre Propriétés. Un descripteur de propriété personnalisé est une classe qui hérite de PropertyExtension<T>, où T est ILayerElement ou une de ses classes dérivées. T est le type pour lequel la propriété est définie.

Par exemple, vous pouvez définir des propriétés sur les types suivants :

  • ILayerModel - le modèle

  • ILayer - chaque couche

  • ILayerDependencyLink - les liens entre les couches

  • ILayerComment

  • ILayerCommentLink

Notes

Il existe également un mécanisme plus simple pour le stockage des chaînes avec tout ILayerElement. Vous pouvez placer des valeurs dans le dictionnaire Properties associé à chaque élément. Cela est utile pour les données que l'utilisateur ne doit pas modifier directement. Pour plus d'informations, consultez Navigation et mise à jour des modèles de couche dans le code de programme.

Exemple

Le code suivant est un descripteur de propriété personnalisé classique. Il définit une propriété booléenne sur le modèle de couche (ILayerModel) qui permet à l'utilisateur de fournir des valeurs pour une méthode de validation personnalisée.

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

Voir aussi

Autres ressources

Création d'extensions de diagrammes de couche