Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico descreve como o WindowsFormsHost elemento interage com o sistema de layout WPF.
O WPF e o Windows Forms oferecem suporte a lógicas diferentes, mas semelhantes, para dimensionar e posicionar elementos em um formulário ou página. Quando você cria uma interface do usuário híbrida (UI) que hospeda controles Windows Forms no WPF, o WindowsFormsHost elemento integra os dois esquemas de layout.
Diferenças no layout entre WPF e Windows Forms
WPF usa layout independente de resolução. Todas as dimensões de layout do WPF são especificadas usando pixels independentes do dispositivo. Um pixel independente do dispositivo é um noventa e sexto de uma polegada em tamanho e resolução, portanto, você obtém resultados semelhantes, independentemente de estar renderizando para um monitor de 72 dpi ou uma impressora de 19.200 dpi.
WPF também é baseado em layout dinâmico. Isso significa que um elemento da interface do usuário se organiza em um formulário ou página de acordo com seu conteúdo, seu contêiner de layout pai e o tamanho da tela disponível. O layout dinâmico facilita a localização ajustando automaticamente o tamanho e a posição dos elementos da interface do usuário quando as cadeias de caracteres que eles contêm mudam de comprimento.
O layout no Windows Forms depende do dispositivo e tem maior probabilidade de ser estático. Normalmente, os controles Windows Forms são posicionados absolutamente em um formulário usando dimensões especificadas em pixels de hardware. No entanto, o Windows Forms oferece suporte a alguns recursos de layout dinâmico, conforme resumido na tabela a seguir.
| Funcionalidade de layout | Descrição |
|---|---|
| Dimensionamento automático | Alguns controles do Windows Forms se redimensionam para exibir seu conteúdo corretamente. Para obter mais informações, consulte Visão Geral da Propriedade AutoSize. |
| Ancoragem e atracação | Os controles do Windows Forms oferecem suporte ao posicionamento e dimensionamento com base no contêiner pai. Para obter mais informações, consulte Control.Anchor e Control.Dock. |
| Dimensionamento automático | Os controles de contêiner redimensionam a si mesmos e seus filhos com base na resolução do dispositivo de saída ou no tamanho, em pixels, da fonte de contêiner padrão. Para obter mais informações, consulte Dimensionamento automático no Windows Forms. |
| Contêineres de layout | Os FlowLayoutPanel e TableLayoutPanel controles organizam os seus controles filhos e têm o seu tamanho ajustado de acordo com o seu conteúdo. |
Limitações de layout
Em geral, os controles do Windows Forms não podem ser dimensionados e transformados na medida do possível no WPF. A lista a seguir descreve as limitações conhecidas quando o elemento WindowsFormsHost tenta integrar seu controle Windows Forms hospedado no sistema de layout WPF.
Em alguns casos, os controles do Windows Forms não podem ser redimensionados ou podem ser dimensionados apenas para dimensões específicas. Por exemplo, um controle de ComboBox do Windows Forms oferece suporte a apenas uma única altura, que é definida pelo tamanho da fonte do controle. Em um layout dinâmico do WPF onde os elementos podem se expandir verticalmente, um controle hospedado ComboBox não se expandirá como esperado.
Os controles do Windows Forms não podem ser girados ou distorcidos. O WindowsFormsHost elemento aciona o LayoutError evento se aplicar uma transformação de inclinação ou de rotação. Se você não manipular o LayoutError evento, um InvalidOperationException é gerado.
Na maioria dos casos, os controles do Windows Forms não oferecem suporte ao dimensionamento proporcional. Embora as dimensões gerais do controle serão dimensionadas, os controles filho e os elementos componentes do controle podem não ser redimensionados conforme o esperado. Essa limitação depende de quão bem cada controle do Windows Forms oferece suporte ao dimensionamento. Além disso, não é possível reduzir os controles do Windows Forms para um tamanho de 0 pixels.
Os controles do Windows Forms oferecem suporte ao dimensionamento automático, no qual o formulário será redimensionado automaticamente e seus controles com base no tamanho da fonte. Em uma interface de usuário do WPF, alterar o tamanho da fonte não redimensiona o layout inteiro, embora elementos individuais possam ser redimensionados dinamicamente.
Ordem-Z
Em uma interface de usuário do WPF, você pode alterar a ordem z dos elementos para controlar o comportamento de sobreposição. Um controle Windows Forms hospedado é desenhado em um HWND separado, portanto, ele é sempre desenhado sobre os elementos WPF.
Um controle Windows Forms hospedado também é desenhado sobre quaisquer Adorner elementos.
Comportamento do layout
As seções a seguir descrevem aspetos específicos do comportamento de layout ao hospedar controles Windows Forms no WPF.
Dimensionamento, conversão de unidade e independência do dispositivo
Sempre que o WindowsFormsHost elemento executa operações envolvendo dimensões WPF e Windows Forms, dois sistemas de coordenadas estão envolvidos: pixels independentes do dispositivo para WPF e pixels de hardware para Windows Forms. Portanto, você deve aplicar conversões de unidade e dimensionamento adequadas para obter um layout consistente.
A conversão entre os sistemas de coordenadas depende da resolução atual do dispositivo e de qualquer layout ou transformação de renderização aplicada ao WindowsFormsHost elemento ou a seus ancestrais.
Se o dispositivo de saída for de 96 dpi e nenhum dimensionamento tiver sido aplicado ao elemento, um pixel independente do WindowsFormsHost dispositivo será igual a um pixel de hardware.
Todos os outros casos exigem dimensionamento do sistema de coordenadas. O controle hospedado não é redimensionado. Em vez disso, o elemento WindowsFormsHost tenta dimensionar o controlador hospedado e todos os seus controladores filho. Como o Windows Forms não oferece suporte total ao dimensionamento, o elemento é dimensionado WindowsFormsHost até o grau suportado por controles específicos.
Substituir o método ScaleChild para fornecer comportamento de dimensionamento personalizado para o controle Windows Forms hospedado.
Além do dimensionamento, o elemento WindowsFormsHost trata de casos de arredondamento e transbordo conforme descrito na tabela a seguir.
| Problema de conversão | Descrição |
|---|---|
| Arredondamento | As dimensões de pixel independentes do dispositivo WPF são especificadas como double, e as dimensões de pixel de hardware do Windows Forms são especificadas como int. Nos casos em que as dimensões baseadas em double são convertidas em dimensões baseadas em int, o elemento WindowsFormsHost usa arredondamento padrão, de modo que os valores fracionários inferiores a 0,5 sejam arredondados para baixo. |
| Transbordo | Quando o elemento WindowsFormsHost converte de valores double para valores int, a sobrecarga é possível. Valores maiores do que MaxValue são definidos como MaxValue. |
Propriedades relacionadas com o layout
As propriedades que controlam o comportamento de layout nos controles do Windows Forms e nos elementos WPF são mapeadas adequadamente pelo elemento WindowsFormsHost. Para obter mais informações, consulte Windows Forms e WPF Property Mapping.
Alterações de layout no controle hospedado
As alterações de layout no controle Windows Forms hospedado são propagadas para o WPF para disparar atualizações de layout. O método em InvalidateMeasure garante que as alterações de layout no controle hospedado de WindowsFormsHost façam com que o mecanismo de layout do WPF seja executado.
Controles do Windows Forms com ajuste contínuo de tamanho
Os controles do Windows Forms que oferecem suporte ao dimensionamento contínuo interagem totalmente com o sistema de layout WPF. O elemento WindowsFormsHost usa os métodos MeasureOverride e ArrangeOverride como de costume para dimensionar e organizar o controlo Windows Forms hospedado.
Algoritmo de dimensionamento
O WindowsFormsHost elemento usa o seguinte procedimento para dimensionar o controle hospedado:
O WindowsFormsHost elemento substitui os MeasureOverride métodos e ArrangeOverride .
Para determinar o tamanho do controle hospedado, o método MeasureOverride chama o método GetPreferredSize do controle hospedado, aplicando uma restrição derivada da restrição passada para o método MeasureOverride.
O ArrangeOverride método tenta definir o controle hospedado para a restrição de tamanho determinado.
Se a propriedade do Size controle hospedado corresponder à restrição especificada, o controle hospedado será dimensionado para a restrição.
Se a Size propriedade não corresponder à restrição especificada, o controle hospedado não oferece suporte ao dimensionamento contínuo. Por exemplo, o MonthCalendar controle permite apenas tamanhos discretos. Os tamanhos permitidos para este controlo consistem em números inteiros (que representam o número de meses) tanto para a altura como para a largura. Em casos como este, o WindowsFormsHost elemento se comporta da seguinte forma:
Se a Size propriedade retornar um tamanho maior do que a restrição especificada, o WindowsFormsHost elemento cortará o controle hospedado. Altura e largura são tratadas separadamente, portanto, o controle hospedado pode ser cortado em qualquer direção.
Se a Size propriedade retornar um tamanho menor do que a restrição especificada, WindowsFormsHost aceita esse valor de tamanho e retorna o valor para o sistema de layout WPF.
Ver também
.NET Desktop feedback