Fornecer suporte de desfazer aos projetistas
Os designers, como os editores, geralmente precisam oferecer suporte a operações de desfazer para que os usuários possam reverter suas alterações recentes ao modificar um elemento de código.
A maioria dos designers implementados no Visual Studio tem suporte a "desfazer" fornecido automaticamente pelo ambiente.
Implementações de designer que precisam fornecer suporte para o recurso de desfazer:
Fornecer gerenciamento de desfazer implementando a classe base abstrata UndoEngine
Persistência de fornecimento e suporte a CodeDOM implementando as IDesignerSerializationService classes e IComponentChangeService .
Para obter mais informações sobre como escrever designers usando o .NET Framework, consulte Estender o suporte ao tempo de design.
O SDK do Visual Studio fornece uma infraestrutura de desfazer padrão por:
Fornecendo implementações de gerenciamento de desfazer através das OleUndoEngine classes e OleUndoEngine.UndoUnit .
Fornecimento de persistência e suporte a CodeDOM através do padrão CodeDomComponentSerializationService e IComponentChangeService implementações.
Obter suporte para desfazer automaticamente
Qualquer designer criado no Visual Studio tem suporte a desfazer automático e completo se, o designer:
Faz uso de uma Control classe baseada para sua interface de usuário.
Emprega o sistema padrão de geração e análise de código baseado em CodeDOM para geração e persistência de código.
Para obter mais informações sobre como trabalhar com o suporte ao Visual Studio CodeDOM, consulte Geração e compilação de código-fonte dinâmico.
Quando usar o suporte a desfazer do Designer Explícito
Os designers devem fornecer seu próprio gerenciamento de desfazer se usarem uma interface gráfica do usuário, conhecida como um adaptador de exibição, diferente da fornecida pelo Control.
Um exemplo disso pode ser a criação de um produto com uma interface de design gráfico baseada na Web em vez de uma interface gráfica baseada no .NET Framework.
Nesses casos, seria necessário registrar esse adaptador de exibição com o Visual Studio usando ProvideViewAdapterAttributeo , e fornecer gerenciamento explícito de desfazer.
Os designers precisam fornecer suporte a CodeDOM e persistência se não usarem o modelo de geração de código do Visual Studio fornecido no espaço de System.CodeDom nome.
Desfazer recursos de suporte do Designer
O SDK do Ambiente fornece implementações padrão de interfaces necessárias para fornecer suporte a desfazer que podem ser usadas por designers que não usam Control classes baseadas para suas interfaces de usuário ou o CodeDOM padrão e o modelo de persistência.
A OleUndoEngine classe deriva da classe .NET Framework UndoEngine usando uma implementação da classe para gerenciar operações de IOleUndoManager desfazer.
O Visual Studio fornece o seguinte recurso para o designer desfazer:
Funcionalidade de desfazer vinculada em vários designers.
As unidades infantis dentro de um designer podem interagir com seus pais implementando IOleUndoUnit e IOleParentUndoUnit no OleUndoEngine.UndoUnit.
O SDK do Ambiente fornece suporte a CodeDOM e persistência fornecendo:
CodeDomComponentSerializationService como implementação do IDesignerSerializationService
Um IComponentChangeService fornecido pelo host de design do Visual Studio.
Usar os recursos do SDK do ambiente para fornecer suporte a desfazer
Para obter suporte para desfazer, um objeto que implementa um designer deve instanciar e inicializar uma instância da OleUndoEngine classe com uma implementação válida IServiceProvider . Essa IServiceProvider classe deve fornecer os seguintes serviços:
-
Os designers que usam a serialização do Visual Studio CodeDOM podem optar por usar CodeDomComponentSerializationService o SDK do Visual Studio como sua implementação do IDesignerSerializationService.
Nesse caso, a IServiceProvider classe fornecida ao OleUndoEngine construtor deve retornar esse objeto como uma implementação da IDesignerSerializationService classe.
-
Os designers que usam o padrão fornecido pelo host de design do Visual Studio têm a garantia de ter uma implementação padrão DesignSurface da IComponentChangeService classe.
Os designers que implementam um mecanismo de OleUndoEngine desfazer baseado rastreiam automaticamente as alterações se:
As alterações de propriedade são feitas por meio do TypeDescriptor objeto.
IComponentChangeService Os eventos são gerados manualmente quando uma alteração não realizável é confirmada.
A modificação no designer foi criada dentro do contexto de um DesignerTransactionarquivo .
O designer opta por criar explicitamente unidades de desfazer usando a unidade de desfazer padrão fornecida por uma implementação de ou a implementação específica do Visual Studio, que deriva de e também fornece uma implementação OleUndoEngine.UndoUnitde UndoEngine.UndoUnit UndoEngine.UndoUnit ambos IOleUndoUnit e IOleParentUndoUnit.