Cambios de extensibilidad en Visual Studio 2010
WPF Designer for Visual Studio proporciona una plataforma sofisticada para implementar experiencias personalizadas de diseño para controles de WPF y Silverlight. La API de Extensibilidad de WPF Designer ha evolucionado significativamente desde su versión inicial en Visual Studio 2008. En las secciones siguientes se describen los cambios en Extensibilidad de WPF Designer para Visual Studio 2010.
Compatibilidad con Silverlight y varias versiones de plataforma
En Visual Studio 2008, los tiempos de diseño de controles solo podían destinarse a la última versión de plataforma de WPF. En Visual Studio 2010, esta compatibilidad se extiende a varias plataformas, incluida la compatibilidad en tiempo de diseño para WPF 3.5, WPF 4, Silverlight 3 y futuras versiones de plataforma. Dado que existe la misma API de extensibilidad para todas estas plataformas, los creadores de controles en tiempo de diseño pueden escribir fácilmente una experiencia y compartirla en los runtimes de controles para cada plataforma.
Compatibilidad en Expression Blend
Las implementaciones en tiempo de diseño de controles pueden destinarse ahora a Expression Blend utilizando la misma interfaz de extensibilidad disponible en Visual Studio. Puede distribuir experiencias en tiempo de diseño independientes o comunes para los dos entornos de creación.
Registrar metadatos
La diferencia más significativa en la API de extensibilidad es que la interfaz IRegisterMetadata se ha reemplazado por la interfaz IProvideAttributeTable. Este cambio, junto con la habilitación de compatibilidad con varias plataformas, ha creado cambios relevantes en la API de extensibilidad. Esto significa que las implementaciones en tiempo de diseño de controles existentes para Visual Studio 2008 no se cargarán en Visual Studio 2010.
Además, en Visual Studio 2010, el atributo ProvideMetadataAttribute se utiliza para indicar que un ensamblado en tiempo de diseño proporciona metadatos al diseñador.
Nuevos puntos de extensibilidad
La nueva API de extensibilidad también admite nuevas experiencias en tiempo de diseño, incluidas las siguientes:
En la ventana Propiedades, compatibilidad para tener acceso al modelo de los editores de categorías. Este cambio se asocia con la elevación de propiedades comunes a la parte superior del listado de categorías para que los creadores de controles puedan proporcionar experiencias de edición avanzadas en la ventana Propiedades.
Nuevos métodos de utilidad AdornerPanel para habilitar una colocación más fácil del adorno en relación con el control personalizado.
Nuevo modelo de programación para compartir implementaciones en tiempo de diseño entre distintas herramientas de diseño, como Visual Studio y Expression Blend.
Nuevo modelo de programación para compartir implementaciones en tiempo de diseño entre varias versiones de .NET Framework de destino.
Comparar la extensibilidad en Visual Studio 2008 y Visual Studio 2010
En la siguiente tabla se resumen las diferencias entre crear experiencias en tiempo de diseño personalizadas en Visual Studio 2008 y en Visual Studio 2010.
Visual Studio 2008 |
Visual Studio 2010 |
---|---|
Para registrar tipos en tiempo de diseño, implemente la interfaz IRegisterMetadata y utilice la clase MetadataStore. |
Para registrar tipos en tiempo de diseño, implemente la interfaz IProvideAttributeTable y llame al método CreateTable. |
No necesita agregar atributos de nivel de ensamblado. |
Debe marcar los ensamblados en tiempo de diseño con el atributo ProvideMetadataAttribute. |
Para asociar un tipo de diseñador a un elemento gráfico, utilice el método GetImage en NewItemFactory, que puede devolver varios tipos de elemento. |
Para asociar un tipo de diseñador a un icono, utilice el método GetImageStream para devolver un mapa de bits. Solo se admiten los mapas de bits. |
Para tener acceso a las propiedades de modelo, utilice la propiedad de dependencia, por ejemplo: ModelProperty backgroundProperty = adornedControlModel.Properties[Control.BackgroundProperty]; |
Para tener acceso a las propiedades de modelo, utilice el nombre de la propiedad de dependencia, por ejemplo: ModelProperty backgroundProperty = adornedControlModel.Properties["Background"]; Además, puede definir PropertyIdentifier, que es una combinación de tipo/cadena. PropertyIdentifier se utiliza con propiedades adjuntas cuando una simple búsqueda del nombre no es suficiente. |
Para distinguir entre espacio de diseño y espacio de representación, utilice la clase AdornerCoordinateSpaces. |
No se usa la clase AdornerCoordinateSpaces. |
Para especificar la posición de los adornos en relación con el contenido, use la clase AdornerPlacementCollection. |
Para especificar la posición de los adornos en relación con el contenido, use los métodos SetAdornerHorizontalAlignment, SetAdornerVerticalAlignment y SetAdornerMargin. Se retiene la clase AdornerPlacementCollection a efectos de compatibilidad con versiones anteriores. |