Arquitetura de extensibilidade Designer WPF
O Windows Presentation Foundation (WPF) Designer for Visual Studio é um ambiente de edição visual para controles compostos WPF, que são implementados pelo tipo de UserControl.O WPF Designer é baseado em uma estrutura com uma arquitetura extensível, o qual você pode estender para criar sua própria experiência design personalizado.
Estendendo a WPF Designer modelo de objeto, você pode personalizar a aparência em tempo de design e o comportamento do conteúdo WPF para um grau marcantes.Por exemplo, você pode estender a WPF Designer nos seguintes aspectos:
Personalizar mover e redimensionar glifos com gráficos avançados.
Adicione um glifo a de superfície de design que inclina o controle selecionado à medida que o mouse se move.
Modificar a aparência em tempo de design e comportamento de um controle por meio de ferramentas diferentes.
A arquitetura WPF Designer oferece suporte completo expressive potência de WPF.Isso permite a criação de várias experiências de design visual que foram anteriormente não é possível.
O WPF Designer do modelo de objeto
O WPF Designer modelo de objeto é modular, que significa que quando você estende o tempo de design, você estender somente os elementos necessários para seus recursos.Você não é necessário que gravar muita suporte o código para habilitar recursos seus design personalizado.
O modelo de objeto é composto por cinco unidades funcionais, que são descritas na tabela a seguir.
Unidade funcional |
Descrição |
---|---|
Editar Modelo |
Interface de programação para objetos no designer. |
Recurso Provedores |
Extensibilidade principal ponto na estrutura de designer. |
Editar contexto |
Armazenamento central para um designer do estado. |
Ferramentas |
Ferramentas para processar entrada do usuário. |
Armazenamento de metadados |
Armazenamento que contém a design-time behavior de um controle para fisicamente separa Designer lógica da lógica de tempo de execução. |
A ilustração a seguir mostra a WPF Designer modelo de objeto.
Observação: |
---|
O WPF Designer Oferece Suporte a estrutura completa de extensibilidade.Expression Blend oferece suporte somente a propriedade editores, carregando de metadados e licenciamento.Combinação não dá suporte menu Ações e adorners. |
Editar Modelo
O ambiente de design interage com controles em tempo de execução embora um interface de programação chamado um modelo de edição.O modelo de edição consiste em três subunits funcionais: um modelo, um wrapper público que abstrai o modelo e um modo de exibição que representa a interface de usuário (UI) do modelo.
O ambiente de design usa o tipo ModelItem para se comunicar com o modelo subjacente.Todas as alterações são feitas para os ModelItem invólucros, que afetam o modelo subjacente.Isso permite que o modelo a ser simples.Os invólucros ModelItem manipular complexos recursos Designer, como o suporte a transações, desfazer de controle e Alterar Notificações.
A classe ModelService fornece o ponto de entrada para a modelo de edição e notificações de evento global.
A classe ViewService mapeia representações visuais para os itens do modelo subjacente.
Os dois serviços são necessários para o designer para a função.A classe DesignerView, que é responsável pelo processamento entrada do usuário e roteamento-lo aos comandos, requer dois desses serviços para mapear entrada do usuário de volta para o modelo com precisão.
Recurso Provedores
Você estender a design-time behavior de seus tipos usando FeatureProvider ou as FeatureConnector<FeatureProviderType> classes.A classe FeatureConnector<FeatureProviderType> gerencia uma lista de objetos FeatureProvider.
A classe FeatureProvider fornece o mais básico extensibilidade ponto.Um provedor de recursos é um recurso Lightweight ou suplemento que normalmente não exige muito da ambiente de design e é criado e destruído em um determinado contexto.Recursos provedores são usados para adicionar novos bits de interface do usuário de superfície de design ou para modificar alguns comportamento básico.Por exemplo, um provedor de recursos pode adicionar mais pegar alças ou fornecem um novo tipo de comportamento do mouse-arrastar.
Para acessar o nível mais profundo de extensibilidade, derive da classe FeatureConnector<FeatureProviderType>.Essa classe expõe um provedor de serviços, pelo qual derivado classes conector de recurso podem manipular eventos e solicitação e publicar os serviços.Por exemplo, você pode implementar um conector de recurso para fornecer seleção específica de objetos de serialização ou interface do usuário.
Em geral, implemente um recurso para estender os conceitos existentes.Implemente um conector de recurso para fornecer novos conceitos.Para obter mais informações, consulte Recurso provedores e conectores de recursos.
Editar contexto
Uma quantidade significativa de informações do estado é acumulada no designer de execução.Por exemplo, o criador do estado pode incluir os objetos que estiverem selecionados, ou o comportamento que ocorre quando o botão do mouse esquerdo é pressionado.Estado de designer é armazenado em um local central, para que ele pode ser encontrado quando ela for necessária.A classe EditingContext representa o repositório central de estado para o designer.
The EditingContext classe separa o estado em duas categorias: os dados e comportamento.Dados são armazenados como uma tabela de itens de contexto e o comportamento é armazenado como uma tabela de serviços.Ambas as tabelas são indexadas por uma chave com base no tipo e são enumeráveis.
A classe ContextItem mantém um único seguimento de estado no designer.Itens de contexto são imutáveis, mas novos itens de contexto podem substituir itens de contexto existente para simular mutability.
Os serviços são acessados por meio uma propriedade de serviços, que retorna uma instância de ServiceManager,e itens de contexto são acessadas através uma propriedade itens, que retorna uma instância de ContextItemManager.
Comandos, Tarefas e Ferramentas
A WPF Designer Ferramenta arquitetura consiste comandos, Tarefas e Ferramentas.
Um COMMAND é um identificador exclusivo que representa algumas comportamento.Por exemplo, “ recortar ” é um comando o que significa para recortar o texto atual e adicioná-lo para a Área de transferência.O código que implementa “ Recortar ” varia de aplicativo para aplicativos e até mesmo varia dentro de um aplicativo.Por exemplo, recortando texto no Word um documento é uma implementação diferente que recortar texto em caixa de texto a pesquisa do mesmo documento.Independentemente da implementação, o comando “ Recortar ” permanece constante.
O WPF Designer aumenta o sistema WPF de linha de comando, apresentando um conceito de uma ferramenta de linha de comando.Uma ferramenta de linha de comando implementa a interface ICommand e é semelhante a RoutedCommand classe.
Um Task tem uma coleção de ligações de linha de comando, que permite que você adicionar comandos roteados.A classe DesignerView possui código que usa a mesma estratégia de roteamento como ferramenta Comandos para localizar e executar roteadas comandos que são definidos nas tarefas.A classe DesignerView permite que as tarefas que oferece suporte comuns WPF comandos, como Copy.
Um Tool é uma classe que processa entrada do usuário.Todos os entrada do usuário entra no criador como um ou mais eventos de entrada.Os eventos de entrada são passados para a ferramenta ativa no momento, que converte-os para a entrada ligações.Se uma vinculação de entrada for retornada, o comando dentro de ligação é executado.
Uma ferramenta pode representar o modo global do designer.Por exemplo, se o usuário é selecionando os componentes na superfície de design, que o modo de seleção é possível porque a ferramenta ativa no momento oferece ligações de entrada e comandos que tratam de seleção.Quando o usuário cria uma nova instância de um controle, uma ferramenta diferente se torna ativa e oferece um conjunto diferente de comandos, que são vinculados para as mesmas ligações de entrada.
Armazenamento de metadados
Na WPF Designer estrutura, metadados definindo a design-time behavior de um controle é acrescentado em um conjunto separado, que é chamado de metadados armazenamento .No .NET Framework 3.5, o armazenamento de metadados é implementado no atributo de código com base em tabelas, com um arquivo XML externo fazendo referência ao designer de código e um perfil.Diferentes ferramentas podem fornecer metadados diferentes armazena com implementações de designer completamente diferentes.Isso dissocia o-tempo de execução e design-time behavior, para que você pode revisar o designer separadamente do controle.Para obter mais informações, consulte Armazenamento de metadados.
Criação da Instância de designer
As etapas a seguir mostram como um tipo de designer exemplo pode ser instanciado pelo ambiente de WPF Designer.Este exemplo fictício mostra como um designer hipotético pode selecionar um único controle de botão na superfície de design.
O usuário chama uma ação ferramentas-definidos solicitar a criação de designer personalizada.
O ambiente de design enumera uma lista com base em XML de recurso-para-tipo de associações.
O ambiente de design adiciona metadados personalizados para esses tipos usando a classe TypeDescriptor.Por exemplo, um GrabHandleProvider pode ser associado com todos os UIElement tipos, incluindo a derivação tipos.
Uma fábrica de edição cria um armazenamento de edição, um contexto e um gerenciador de recursos e preenche o armazenamento de edição.
O WPF Designer enumera todos os UIElement Objetos, que são expostos pelo armazenamento de edição, e chama o método InitializeFeatures para cada.
Suponha que um elemento Button é declarado dessa hierarquia.
O FeatureManager procura por um FeatureAttribute no botão.O FeatureManager descobre um FeatureAttribute sobre o botão do tipo GrabHandleProvider.
O FeatureManager continua a pesquisa do tipo GrabHandleProvider e descobre que um FeatureConnectorAttribute associado a ele.O FeatureConnectorAttribute Especifica o SelectionConnector.
O FeatureManager determina que este host não ainda existe.O FeatureManager cria a SelectionConnector e o adiciona à lista de hosts recurso ativo.
O objeto SelectionConnector inicia monitorando o superfície de design para alterações de seleção.O objeto SelectionConnector também obtém uma referência a camada de adorno.
O usuário altera a seleção para o botão e a ferramenta em tempo de design gera um evento seleção-alterado.
O SelectionConnector receber essa notificação e cria seleção-com base em todas as FeatureProvider instâncias associadas ao objeto selecionado, incluindo a instância GrabHandleProvider.
O SelectionConnector consulta o GrabHandleProvider para obter uma lista de adorners e os adiciona à camada de adorno.Captura alças aparecem ao redor do botão selecionado.
O WPF Designer conjuntos de módulos (assemblies)
The WPF Designer consiste em vários assemblies que pertence a uma das três categorias: público, particular e Visual Studio específico.
As montagens públicas expõem classes quais você pode usar para adicionar os controles em tempo de design lógica.
The private and Visual Studio-specific assemblies define the feature set of the WPF Designer and its interactions with Visual Studio.The following table shows how WPF Designer features are deployed.
Assembly |
Public API |
Descrição |
---|---|---|
Microsoft.VisualStudio.Xaml.dll |
Não |
Visual Studio SDK integration logic |
Microsoft.Windows.Design.Host.dll |
Sim |
Public API for hosting designer (specific to Visual Studio) |
Microsoft.Windows.Design.Developer.dll |
Não |
WPF Designer implementation.Only public API is an attribute table. |
Microsoft.Windows.Design.Core.dll |
Sim |
Provides basic foundation for any designer through a service and data backplane and manipulation of metadata.This is the only assembly supported by Expression Blend. |
Microsoft.Windows.Design.Extensibility.dll |
Sim |
Provides extensibility model through attributes. |
Microsoft.Windows.Design.Interaction.dll |
Sim |
Provides user input and display classes. |
Microsoft.Windows.Design.Markup.dll |
Sim |
Provides Extensible Application Markup Language (XAML) and document model mechanisms. |
Observação: |
---|
Assemblies represent functionality boundaries, not namespace boundaries.You will often find namespaces which span than one assembly. |
The WPF Designer and the Windows Forms Designer Architecture
A arquitetura WPF Designer é significativamente diferente da arquitetura de Windows Forms Designer, que é caracterizada por IComponent namespace e a interface System.ComponentModel.Para obter mais informações, consulte Comparando o Framework Windows Forms Designer para o framework Designer WPF.
Consulte também
Conceitos
Recurso provedores e conectores de recursos