Compartir a través de


Implementar un control personalizado y ensamblados en tiempo de diseño

Cuando una herramienta de diseño abre el ensamblado del control personalizado, también busca los ensamblados en tiempo de diseño relacionados. En concreto, los diseñadores buscan ensamblados que tengan el atributo ProvideMetadataAttribute de nivel de ensamblado. Al encontrar dicho atributo, el diseñador busca en el ensamblado una clase que implementa la interfaz IProvideAttributeTable. El diseñador consulta la propiedad AttributeTable de esta clase para una colección de atributos que especifica el comportamiento en tiempo de diseño.

Convención de nomenclatura para ensamblados en tiempo de diseño

Las herramientas de diseño, como Visual Studio y Expression Blend, detectan los ensamblados en tiempo de diseño personalizados mediante una convención de nomenclatura. Esta convención ha evolucionado a lo largo de las distintas versiones de las herramientas. Use la tabla siguiente a fin de asignar un nombre a los ensamblados para los diseñadores de destino adecuados.

Entorno de destino

Convención de nomenclatura

Nombres de ejemplo

Expression Blend 3 y Visual Studio 2010 

<BibliotecaDeControles>.Design.<versión>.dll (común)

<BibliotecaDeControles>.Expression.Design.<versión>.dll (Expression Blend)

<BibliotecaDeControles>.VisualStudio.Design.<versión>.dll (Visual Studio)

TailspinToysControls.Design.4.0.dll

TailspinToysControls.Expression.Design.4.0.dll

TailspinToysControls.VisualStudio.Design.4.0.dll

Expression Blend 2 y Visual Studio 2008 

<BibliotecaDeControles>.Design.dll (común)

<BibliotecaDeControles>.Expression.Design.dll (Expression Blend)

<BibliotecaDeControles>.VisualStudio.Design.dll (Visual Studio)

TailspinToysControls.Design.dll

TailspinToysControls.Expression.Design.dll

TailspinToysControls.VisualStudio.Design.dll

"Común" hace referencia a las implementaciones en tiempo de diseño que comparten Visual Studio y Expression Blend. La subcadena <versión> especifica la versión correspondiente del marco de WPF Designer. Para comprobarla, inspeccione la versión del ensamblado Microsoft.Windows.Design.dll.

Los ensamblados en tiempo de diseño específicos de una herramienta pueden invalidar la implementación compartida en el ensamblado común. Esto significa que la experiencia de diseño personalizada puede variar considerablemente en las distintas herramientas de diseño. Para obtener más información, vea Proporcionar metadatos en tiempo de diseño.

Registrar ensamblados en tiempo de diseño

Registre el control y los ensamblados en tiempo de diseño asociados a este mediante el procedimiento de registro de la carpeta de ensamblados, también denominado registro de AssemblyFoldersEx. Para registrar los controles mediante el procedimiento mencionado, solo se requiere que los ensamblados del control existan en el disco y que se hayan especificado las entradas de Registro del cuadro de herramientas. Este procedimiento de registro se puede producir antes o después de instalar Visual Studio.

AssemblyFoldersEx es una clave del Registro ubicada bajo cada versión de .NET Framework de destino, como Silverlight 3 o .NET Framework 4. AssemblyFoldersEx incluye un conjunto de claves que especifican las carpetas que contienen ensamblados específicos de .NET Framework. Por ejemplo, cuando el destino es Silverlight 3, la clave del Registro AssemblyFoldersEx se ubica en la siguiente ruta de acceso del Registro.

[HKCU o HKLM]\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Silverlight\v3.0\AssemblyFoldersEx

Al crearse la subclave Toolbox y sus entradas auxiliares bajo una clave AssemblyFoldersEx, aparecen controles en el cuadro de herramientas y en los cuadros de diálogo Agregar referencias y Elegir elementos.

En la tabla siguiente se enumeran las entradas del Registro que se pueden usar en las claves Toolbox y AssemblyFoldersEx para registrar una carpeta de ensamblado.

Entrada del Registro

Tipo de entrada del Registro

Descripción

Ejemplo

<assembly>

Clave

Nombre de la clave, normalmente con marca.

[Controles TailspinToys]

<carpeta de ensamblado>

Valor de cadena predeterminado

Especifica la ruta de acceso de instalación completa para el ensamblado del control personalizado. Los diseñadores buscarán los ensamblados en tiempo de diseño en esta carpeta y en una subcarpeta denominada Design.

@="c:\\Archivos de programa\\Reference Assemblies\\TailspinToys Controls\\Bin\\"

Toolbox

Clave

Agregue la clave Toolbox si desea que se busquen controles en los ensamblados de <carpeta de ensamblado> para agregarlos al cuadro de herramientas. Si no se especifica esta clave, los controles aparecen en el cuadro de diálogo Elegir elementos y los ensamblados en el cuadro de diálogo Agregar referencia, pero no en el cuadro de herramientas.

[Cuadro de herramientas]

TabName

Valor de cadena

Especifica el grupo del cuadro de herramientas predeterminado para los controles en <carpeta de ensamblado>. Si el grupo no existe, se crea. Si no se especifica el valor, los controles se instalan en el grupo predeterminado para la plataforma.

Use este valor para especificar una marca en lugar de una categoría funcional. No destine las categorías Común o Todos los controles a los controles personalizados de WPF y Silverlight. El valor no se puede localizar.

"TabName"="TailspinToys"

Servicing

Claves

Para forzar una actualización de la memoria caché del cuadro de herramientas, especifique una nueva clave o valor dentro de la clave Toolbox. La manera recomendada para ello consiste en crear una subclave Updates que contiene un valor de registro para cada actualización instalada. La actualización de la memoria caché solo es aplicable a los controles que se encuentran en la carpeta específica a la que pertenece la clave Toolbox, no a todos los controles del marco.

Es posible que las actualizaciones del cuadro de herramientas del usuario para los controles de una carpeta de ensamblado se pierdan al actualizar dicha carpeta.

[Actualizaciones]

"Update3"="1"

"Update7"="1"

El siguiente script de Registro de ejemplo registra los ensamblados destinados a .NET Framework 4 que se encuentran en la ruta de acceso Reference Assemblies. Los controles cuyo atributo ToolboxBrowsableAttribute está establecido en true se muestran en el cuadro de herramientas bajo la pestaña Tailspin Toys.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys]
@="c:\\\\Program Files\\\\Reference Assemblies\\\\TailspinToys Controls\\\\Bin\\\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0\AssemblyFoldersEx\TailspinToys\Toolbox]
"TabName"="Tailspin Toys"

ToolboxBrowsableAttribute y la clave del Registro del cuadro de herramientas

Para especificar si el control personalizado aparece en el cuadro de herramientas, agregue ToolboxBrowsableAttribute a los metadatos en tiempo de diseño del control. Para obtener más información, vea Tutorial: Proporcionar metadatos para los iconos del cuadro de herramientas.

El cuadro de diálogo Elegir elementos se usa para explorar nuevos ensamblados y agregar nuevos controles al cuadro de herramientas. En la tabla siguiente se muestra cómo la interacción entre ToolboxBrowsableAttribute y la clave del Registro Toolbox determina cuándo aparece el control personalizado en el cuadro de herramientas y en el cuadro de diálogo Elegir elementos.

Clave del Registro Toolbox

Sin clave del Registro Toolbox

ToolboxBrowsable = true

  • En el cuadro de herramientas

  • En el cuadro de diálogo Elegir elementos

  • No en el cuadro de herramientas

  • En el cuadro de diálogo Elegir elementos

ToolboxBrowsable = false

  • No en el cuadro de herramientas

  • No en el cuadro de diálogo Elegir elementos

  • No en el cuadro de herramientas

  • No en el cuadro de diálogo Elegir elementos

Cargar ensamblados en tiempo de diseño

Los diseñadores cargan los ensamblados en tiempo de diseño personalizados en un orden concreto. Esto permite que las implementaciones específicas del diseñador reemplacen a las implementaciones genéricas. La siguiente lista muestra el orden en que se cargan los ensamblados en tiempo de diseño para un control personalizado que se implementa en un ensamblado denominado ControlLibrary.dll.

  1. ControlLibrary.dll (ensamblado del control)

  2. ControlLibrary.Design.<versión>.dll

  3. Design\ControlLibrary.Design.<versión>.dll

  4. ControlLibrary.[Expression|VisualStudio].Design.<versión>.dll

  5. Design\ControlLibrary.[Expression|VisualStudio].Design.<versión>.dll

Los ensamblados específicos del diseñador reemplazan las implementaciones de los ensamblados genéricos. Por ejemplo, TailspinToysControlLibrary.VisualStudio.Design.dll puede reemplazar las implementaciones en TailspinToysControlLibrary.Design.dll.

Además, un ensamblado en tiempo de diseño se carga de acuerdo con la <versión> especificada en el nombre de archivo. Las reglas siguientes muestran cómo interpreta el elemento <versión> un diseñador.

  • Si <versión> tiene un número de versión principal distinto al de la versión de .NET Framework del diseñador, el ensamblado del diseño no se carga.

  • Si hay más de un ensamblado en tiempo de diseño compatible con la versión de .NET Framework del diseñador, este último carga la versión compilada con la versión superior de .NET Framework no posterior a la versión de .NET Framework del diseñador.

En la tabla siguiente se muestra un ejemplo de un diseñador compilado con la versión de .NET Framework 4.1.3.0 que carga cuatro ensamblados en tiempo de diseño con distintas versiones.

Nombre de ensamblado en tiempo de diseño de ejemplo

¿Realiza la carga el diseñador?

ControlLibrary.Design.3.0.1.0.dll

No. Versión no compatible.

ControlLibrary.Design.4.0.1.0.dll

No. Se podría cargar, pero hay disponible una versión posterior.

ControlLibrary.Design.4.1.1.0.dll

Sí. La versión más próxima a la del diseñador.

ControlLibrary.Design.4.3.dll

No. Compilado con una versión de .NET Framework superior a la del diseñador.

Actualizar el cuadro de herramientas

Al actualizar ensamblados en las carpetas especificadas por la clave AssemblyFoldersEx, puede que sea necesario actualizar la memoria caché del cuadro de herramientas de Visual Studio. La memoria caché contiene los nombres, las categorías y los iconos para los controles que aparecen en el cuadro de herramientas. La memoria caché no incluye el control o los ensamblados en tiempo de diseño. Cuando se compilan los proyectos, los controles o ensamblados que se utilizan en tiempo de diseño se actualizan automáticamente.

La memoria caché del cuadro de herramientas para una carpeta de ensamblado se actualiza si se modifica una clave AssemblyFoldersEx de cualquier forma (cambia cualquiera de sus valores o subclaves). La actualización se produce al inicializar el cuadro de herramientas, cuando aparece por primera vez el panel de tareas de dicho cuadro (normalmente al iniciar Visual Studio o cargar un proyecto).

Para forzar una actualización de la memoria caché del cuadro de herramientas, especifique una nueva clave o valor dentro de la clave Toolbox. La manera recomendada para ello consiste en crear una subclave Servicing que contendrá un valor de registro para cada actualización instalada. La actualización de la memoria caché solo es aplicable a los controles que se encuentran en la carpeta específica a la que pertenece la clave Toolbox, no a todos los controles del marco. Es posible que las actualizaciones del cuadro de herramientas del usuario para los controles de una carpeta de ensamblado se pierdan al actualizar dicha carpeta.

Vea también

Referencia

ToolboxBrowsableAttribute

ProvideMetadataAttribute

Otros recursos

Introducción a la extensibilidad de WPF Designer

Conceptos de extensibilidad básica

Proporcionar metadatos en tiempo de diseño