Condividi tramite


Aggiunta di proprietà personalizzate a un diagramma livelli

Questo Feature Pack di Visual Studio 2010 consente di definire proprietà personalizzate per gli elementi dei diagrammi livello di Visual Studio 2010 Ultimate. È possibile rendere disponibili queste proprietà nella finestra Proprietà, in modo che gli utenti possano visualizzarle e modificarle. Per ulteriori informazioni, vedere Feature Pack di Visual Studio.

Gli elementi livello (ILayerElement) dispongono di molte proprietà standard quali Name e Description. Queste proprietà possono essere modificate dall'utente nel finestra Proprietà ed essere lette e aggiornate dal codice programma.

È possibile definire proprietà personalizzate associabili a qualsiasi elemento livello. Il modo più semplice per ottenere questo risultato consiste nell'aggiungere valori al dizionario Properties associato a ogni ILayerElement. Ciò potrebbe essere sufficiente se si desidera unicamente utilizzare le proprietà nel codice programma.

Tuttavia, definendo una proprietà personalizzata è possibile rendere visibile all'utente un valore aggiuntivo nella finestra Proprietà. Un descrittore di proprietà personalizzato è una classe che eredita da PropertyExtension<T>, dove T è ILayerElement o una delle classi derivate. T è il tipo per il quale viene definita la proprietà.

Ad esempio, è possibile definire le proprietà nei seguenti tipi:

  • ILayerModel: modello.

  • ILayer: ogni livello.

  • ILayerDependencyLink: collegamenti tra livelli.

  • ILayerComment

  • ILayerCommentLink

Nota

Esiste anche un meccanismo più semplice per l'archiviazione di stringhe insieme agli elementi ILayerElement. È possibile inserire valori nel dizionario Properties associato a ogni elemento. Tale metodo è utile per i dati di cui non si desidera consentire all'utente la modifica diretta. Per ulteriori informazioni, vedere Esplorazione e aggiornamento di modelli di livello nel codice del programma.

Esempio

Il codice seguente è un tipico esempio di descrittore di proprietà personalizzato. Definisce una proprietà booleana nel modello di livello (ILayerModel) che consente all'utente di fornire valori per un metodo di convalida personalizzato.

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

Vedere anche

Altre risorse

Creazione di estensioni per diagrammi livelli