Proporcionar compatibilidad para deshacer a los diseñadores
Los diseñadores, como los editores, suelen necesitar admitir operaciones de deshacer para que los usuarios puedan revertir sus cambios recientes al modificar un elemento de código.
La mayoría de los diseñadores implementados en Visual Studio tienen compatibilidad con "deshacer" proporcionada automáticamente por el entorno.
Implementaciones del diseñador que necesitan proporcionar compatibilidad con la característica de deshacer:
Proporcionar administración de deshacer mediante la implementación de la clase base abstracta UndoEngine
Proporcione persistencia y compatibilidad con CodeDOM mediante la implementación de las IDesignerSerializationService clases y IComponentChangeService .
Para obtener más información sobre cómo escribir diseñadores con .NET Framework, vea Ampliar la compatibilidad en tiempo de diseño.
El SDK de Visual Studio proporciona una infraestructura de deshacer predeterminada mediante:
Proporcionar implementaciones de administración de deshacer a través de las OleUndoEngine clases y OleUndoEngine.UndoUnit .
Proporcionar persistencia y compatibilidad con CodeDOM a través de las implementaciones y IComponentChangeService predeterminadasCodeDomComponentSerializationService.
Obtener compatibilidad con deshacer automáticamente
Cualquier diseñador creado en Visual Studio tiene compatibilidad automática y completa para deshacer si, el diseñador:
Usa una Control clase basada en su interfaz de usuario.
Emplea el sistema estándar de generación y análisis de código basado en CodeDOM para la generación y persistencia de código.
Para obtener más información sobre cómo trabajar con la compatibilidad con Visual Studio CodeDOM, vea Generación y compilación dinámica de código fuente.
Cuándo usar la compatibilidad con deshacer del diseñador explícito
Los diseñadores deben proporcionar su propia administración de deshacer si usan una interfaz gráfica de usuario, denominada adaptador de vista, que no sea la proporcionada por Control.
Un ejemplo de esto podría ser crear un producto con una interfaz gráfica basada en web en lugar de una interfaz gráfica basada en .NET Framework.
En tales casos, tendría que registrar este adaptador de vista con Visual Studio mediante ProvideViewAdapterAttributey proporcionar una administración de deshacer explícita.
Los diseñadores deben proporcionar compatibilidad con CodeDOM y persistencia si no usan el modelo de generación de código de Visual Studio proporcionado en el espacio de System.CodeDom nombres.
Deshacer características de compatibilidad del diseñador
El SDK de entorno proporciona implementaciones predeterminadas de interfaces necesarias para proporcionar compatibilidad para deshacer que los diseñadores no pueden usar Control clases basadas para sus interfaces de usuario o el modelo de persistencia y CodeDOM estándar.
La OleUndoEngine clase deriva de la clase .NET Framework UndoEngine mediante una implementación de la IOleUndoManager clase para administrar las operaciones de deshacer.
Visual Studio proporciona la siguiente característica para deshacer el diseñador:
Funcionalidad de deshacer vinculada entre varios diseñadores.
Las unidades secundarias dentro de un diseñador pueden interactuar con sus elementos primarios mediante la implementación IOleUndoUnit y IOleParentUndoUnit en OleUndoEngine.UndoUnit.
El SDK de entorno proporciona compatibilidad con CodeDOM y persistencia proporcionando:
CodeDomComponentSerializationService como una implementación de IDesignerSerializationService
Proporcionado IComponentChangeService por el host de diseño de Visual Studio.
Uso de las características del SDK de entorno para proporcionar compatibilidad con deshacer
Para obtener compatibilidad con deshacer, un objeto que implementa un diseñador debe crear instancias e inicializar una instancia de la OleUndoEngine clase con una implementación válida IServiceProvider . Esta IServiceProvider clase debe proporcionar los siguientes servicios:
-
Los diseñadores que usan la serialización de Visual Studio CodeDOM pueden optar por usar CodeDomComponentSerializationService proporcionada con el SDK de Visual Studio como su implementación de IDesignerSerializationService.
En este caso, la IServiceProvider clase proporcionada al OleUndoEngine constructor debe devolver este objeto como una implementación de la IDesignerSerializationService clase .
-
Se garantiza que los diseñadores que usan el valor predeterminado DesignSurface proporcionado por el host de diseño de Visual Studio tengan una implementación predeterminada de la IComponentChangeService clase .
Los diseñadores que implementan un OleUndoEngine mecanismo de deshacer basado realizan un seguimiento automático de los cambios si:
Los cambios de propiedad se realizan a través del TypeDescriptor objeto .
IComponentChangeService los eventos se generan manualmente cuando se confirma un cambio indable.
La modificación en el diseñador se creó en el contexto de .DesignerTransaction
El diseñador decide crear explícitamente unidades de deshacer mediante la unidad de deshacer estándar proporcionada por una implementación de o la implementación específica de UndoEngine.UndoUnit Visual Studio, que deriva de UndoEngine.UndoUnit y también proporciona una implementación de y IOleUndoUnit IOleParentUndoUnit.OleUndoEngine.UndoUnit