Adorner de arquitetura
A experiência visual design requer adorners ,que são especiais glifos na superfície de design.Adorners são normalmente anexados a um controle de destino , e eles conceder ao usuário uma maneira gráfica de ajustar as propriedades do controle.Por exemplo, quando você estiver criando um controle, e você clicar em um canto para redimensioná-la, o glifo de dimensionamento você clicar em é um adorner.
A capacidade rascunho, refinar e restyle adorners rapidamente e facilmente é importante para a WPF Designer arquitetura.Esta visão geral explica como o modelo de extensibilidade adorner WPF Designer simplifica para você criar seus próprio adorners para personalizar a experiência de design para os controles.
O WPF Designer oferece um mecanismo flexível para exibir adorners.Esse mecanismo é agrupado com um sistema flexível de linha de comando que permite que adorners responder a entrada do usuário.Você Adicionar adorners a um controle usando a MetadataStore.
Tipos de Adorners
Adorners pode modelar quase qualquer visual em tempo de design apresentação, mas alguns tipos de adorners aparecem repetidamente.A tabela a seguir descreve os adorners usados com frequência.
Adorner |
Descrição |
---|---|
Pegue alça |
Permite que Movendo e dimensionando um controle; sem escala. |
Ferroviário |
Adiciona um marcador ou regra ao longo um lado de um controle; sem escala em um único eixo. |
Frame |
Representa um controle do limites; dimensiona junto dois eixos. |
Sobreposição |
Captura interações do mouse na região do controle; dimensiona junto dois eixos.Aproximadamente equivalente para o corpo glifos na System.ComponentModel estrutura de designer. |
Características adorner
A estrutura WPF Designer Permite adorners que têm as seguintes características.
Permitir para ser derivadas de qualquer classe UIElement Suporte estilos Windows Presentation Foundation e adorners.
Permitir para todos os tamanho, posição e a escala deve ser especificado de forma independente para as dimensões vertical e horizontal.
Eliminar a necessidade de uma classe base adorner.Adorner tipos podem ser derivados de qualquer tipo UIElement que atenda às suas necessidades.
Criando personalizados Adorners
Adorners são fornecidos pela AdornerProvider provedor de recursos.Você pode adicionar um AdornerProvider recurso a uma classe, que adiciona automaticamente adorners o superfície de design.As orientações a seguir mostram como criar adorners personalizados.
Demonstra Passo a passo: Implementando um trilho dentro de um controle
Demonstra Passo a passo: Depuração de controles do WPF personalizados em time de design
Extensibilidade adorner
Adorners são adicionados de acordo com uma provedor de adorno da diretiva.Você adicionar uma diretiva para um AdornerProvider adicionando o UsesItemPolicyAttribute para o definição de classe.
Quando a IsInPolicy verificação é satisfeita, o adorner é exibido na superfície de design.
Você pode adicionar provedores adorner para um controle que oferece adorners para uma determinada diretiva.Ao alterar os itens a diretiva, o conector de recurso adorner Consulta para novos provedores adorner em novos controles e exibe um conjunto atualizado de adorners.
A WPF Designer implementa o PrimarySelectionAdornerProvider, que oferece um conjunto de adorners que são mostradas para a seleção principal.A maioria dos provedores personalizado adorner derivar dessa classe.
Adorners e layout
O problema mais importante para adorners é de layout.Adorners exigem uma grande variedade de opções de layout.Alongando específico ou dimensionamento comportamento para uma adorner deve ser considerado quando a configuração de zoom é alterada para a superfície de designer.Adorners devem ser capazes dimensionar e posicionar si de acordo com a esquemas a seguir.
Relativo para o estilo aplicado.
Relativo ao tamanho e posição do controle adorned.
Desloca relativa para absolutas pixel.
Relativo à atual configuração de zoom.
Em WPF, o mecanismo típico para controlar o layout é o painel.A estrutura WPF Designer controles de layout usando a classe AdornerPanel para adorners pai para um determinado controle em um superfície de design.
A classe AdornerPanel oferece métodos que permitem que adorners ser dimensionada e posicionado em relação às tanto o tamanho especificado pelo estilo de adorner, o tamanho do controle adorned ou um tamanho absoluto em pixels.Esses métodos são cumulativos, que significa que é possível criar um adorner que é deslocada de um tamanho relativo ou posição.Tal um deslocamento pode ser definido em pixels lógicos que dimensionar ou não escala quando a configuração de zoom é alterada para a superfície de designer.O tipo AdornerPlacementCollection fornece métodos para especificar esses relacionamentos.
O exemplo de código a seguir mostra como posicionar um adorner acima do controle de destino.
' Setup the adorner panel.
' All adorners are placed in an AdornerPanel
' for sizing and layout support.
Dim myPanel = Me.Panel
AdornerPanel.SetHorizontalStretch(opacitySlider, AdornerStretch.Stretch)
AdornerPanel.SetVerticalStretch(opacitySlider, AdornerStretch.None)
Dim placement As New AdornerPlacementCollection()
' The adorner's width is relative to the content.
' The slider extends the full width of the control it adorns.
placement.SizeRelativeToContentWidth(1.0, 0)
' The adorner's height is the same as the slider's.
placement.SizeRelativeToAdornerDesiredHeight(1.0, 0)
' Position the adorner above the control it adorns.
placement.PositionRelativeToAdornerHeight(-1.0, 0)
' Position the adorner up 5 pixels. This demonstrates
' that these placement calls are additive. These two calls
' are equivalent to the following single call:
' PositionRelativeToAdornerHeight(-1.0, -5).
placement.PositionRelativeToAdornerHeight(0, -5)
AdornerPanel.SetPlacements(opacitySlider, placement)
// Setup the adorner panel.
// All adorners are placed in an AdornerPanel
// for sizing and layout support.
AdornerPanel myPanel = this.Panel;
AdornerPanel.SetHorizontalStretch(opacitySlider, AdornerStretch.Stretch);
AdornerPanel.SetVerticalStretch(opacitySlider, AdornerStretch.None);
AdornerPlacementCollection placement = new AdornerPlacementCollection();
// The adorner's width is relative to the content.
// The slider extends the full width of the control it adorns.
placement.SizeRelativeToContentWidth(1.0, 0);
// The adorner's height is the same as the slider's.
placement.SizeRelativeToAdornerDesiredHeight(1.0, 0);
// Position the adorner above the control it adorns.
placement.PositionRelativeToAdornerHeight(-1.0, 0);
// Position the adorner up 5 pixels. This demonstrates
// that these placement calls are additive. These two calls
// are equivalent to the following single call:
// PositionRelativeToAdornerHeight(-1.0, -5).
placement.PositionRelativeToAdornerHeight(0, -5);
AdornerPanel.SetPlacements(opacitySlider, placement);
Comportamento de zoom
Quando a configuração de zoom para a exibição do Designer é alterada para 200 %, o controle adorned é processado em duas vezes seu tamanho.Todas as distâncias e as fontes são maiores, e linhas são mais largas.Muitos designs adorner especificar que adorners permanecem seu tamanho original mesmo quando o designer exibir alterações de zoom.
Espaço de layout e espaço de processamento
No WPF Designer, você pode colocar controles na área de design relativa à dois quadros de referência diferente: espaço de layout e espaço de processamento.
Espaço de Layout define a quantidade de espaço que o controle ocupará quando o layout do seu design é calculado pelo sistema WPF layout.Espaço de processamento define quanto espaço um controle que ocupa após o layout é calculado e processamento todas as transformações são aplicadas.Para obter mais informações, consulte Espaço de layout e espaço de processamento.
DesignerView
A classe DesignerView fornece um conjunto de adorners e mapeia todas as entrada do usuário para gestos de designer.A classe DesignerView deriva da classe Decorator.Ele fornece uma superfície visual para o designer.Atribuir a elemento raiz do criador é interface do usuário para a propriedade Child de DesignerView e definir a propriedade de contexto de edição no modo de exibição do Designer para apontar para o contexto de edição para o designer.
DesignerView view = new DesignerView();
view.Child = documentManager.View;
view.Context = editingContext;
A classe DesignerView implementa dois aspectos de WPF Designer.
Adorners
A classe DesignerView oferece suporte para adorning elementos no modo de exibição com adicionais ornamentos visual que sobrepor os controles que está sendo criados.
Roteamento de entrada
A classe DesignerView roteia entrada do usuário para adorners, ferramentas, comandos e tarefas.
The DesignerView classe funciona com a introdução de dois elementos adicionais na frente de todo o conteúdo: uma camada de adorno e uma camada de teste de hit.O diagrama a seguir mostra o relacionamento das camadas de exibição do Designer com a árvore visual.
A classe DesignerView possui um construtor vazio para uso em XAML.
Consulte também
Tarefas
Demonstra Passo a passo: Criar um adorno de time de design