Agregar propiedades personalizadas a diagramas de capas
Este Feature Pack de Visual Studio 2010 le permite definir propiedades personalizadas para los elementos de diagramas de capas en Visual Studio 2010 Ultimate. Puede hacer que estas propiedades aparezcan en la ventana Propiedades, para que los usuarios puedan verlas y modificarlas. Para obtener más información, vea Paquetes de características de Visual Studio.
Los elementos de capa (ILayerElement) tienen varias propiedades estándar como Name y Description. El usuario puede editar estas propiedades en la ventana Propiedades y también puede leerlas y actualizarlas el código de programa.
Puede definir sus propias propiedades, que pueden estar asociadas a cualquier elemento de capa. La forma más sencilla de hacerlo consiste en agregar valores al diccionario Properties adjunto a cada ILayerElement. Esto podría ser suficiente si solo desea usar las propiedades en su propio código de programa.
No obstante, si define una propiedad personalizada, puede hacer que un valor adicional sea visible para el usuario en la ventana Propiedades. Un descriptor de propiedad personalizado es una clase que se hereda de PropertyExtension<T>, donde T es ILayerElement o una de sus clases derivadas. T es el tipo para el que se define la propiedad.
Por ejemplo, puede definir propiedades en los siguientes tipos:
ILayerModel: el modelo
ILayer: cada capa
ILayerDependencyLink: los vínculos entre las capas
ILayerComment
ILayerCommentLink
Nota
También hay un mecanismo más sencillo para almacenar las cadenas junto con cualquier ILayerElement. Puede colocar los valores en el diccionario Properties adjunto a cada elemento. Resulta útil para los datos que no desea que el usuario modifique directamente. Para obtener más información, vea Navegar y actualizar modelos de capas en el código del programa.
Ejemplo
El siguiente código es un descriptor de propiedad personalizado típico. Define una propiedad booleana en el modelo de capas (ILayerModel) que permite al usuario proporcionar valores para un método de validación personalizado.
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;
}
}
}
}