Compartilhar via


Cenários Suportados no Windows Presentation Foundation e Interoperação Windows Forms

WPF e Windows Forms apresentam duas diferentes arquiteturas para criação de interfaces de aplicativo. O espaço de nomes System.Windows.Forms.Integration fornece classes que permitem cenários comuns de interoperação. As duas classes chave que implementam recursos de interoperabilidade são WindowsFormsHost e ElementHost. Este tópico descreve quais cenários de interoperação são suportados e quais cenários não são suportados.

ObservaçãoObservação:

É dada atenção especial ao controle híbrida cenário. Um controle híbrido tem um controle de uma tecnologia aninhado em um controle da outra tecnologia. Isso também é chamado de interoperação aninhada. Um controle multinível híbrido tem mais de um nível de de aninhamento de controles híbridos. Um exemplo de interoperação multinível aninhada é um controle Windows Forms que contém um controle WPF, que contém outro controle Windows Forms. Controles híbridos multinível não são suportados.

Este tópico contém as seguintes seções.

  • Hospedagem de Controles Windows Forms baseada em Windows Presentation Foundation
  • Hospedagem de Controles Windows Presentation Foundation para Aplicativos baseados em Windows Forms
  • Tópicos relacionados

Hospedagem de Controles Windows Forms baseada em Windows Presentation Foundation

Os seguintes cenários de interoperabilidade são suportados quando um controle WPF hospeda um controle Windows Forms:

  • O controle WPF pode hospedar um ou mais controles Windows Formsusando XAML.

  • Ele pode hospedar um ou mais controles Windows Forms usando código.

  • Ele pode hospedar controles contêineres Windows Forms que contêm outros controles Windows Forms.

  • Ele pode hospedar um formulário mestre/detalhes com um mestre WPF e detalhes Windows Forms.

  • Ele pode hospedar um formulário mestre/detalhes com um mestre Windows Forms e detalhes WPF.

  • Ele pode hospedar um ou mais controles ActiveX.

  • Ele pode hospedar um ou mais controles compostos.

  • Ele pode hospedar controles híbridos usando Extensible Application Markup Language (XAML).

  • Ele pode hospedar controles híbridos usando código.

Suporte à Layout

A lista a seguir descreve as limitações conhecidas quando o elemento WindowsFormsHost tenta integrar seu controle Windows Forms no sistema de layout WPF.

  • Em alguns casos, controles Windows Forms não podem ser redimensionados, ou podem ser dimensionados somente para dimensões específicas. Por exemplo, um controle ComboBox Windows Forms oferece suporte somente a uma única altura, que é definida pela tamanho da fonte do controle. Em um layout dinâmico WPF, que assume que elementos podem alongar-se verticalmente, um controle ComboBox hospedado não irá alongar-se conforme o esperado.

  • Controles Windows Forms não podem ser girados ou inclinados. Por exemplo, quando você rotaciona sua interface do usuário por 90 graus, controles hospedados Windows Forms manterão sua posição vertical.

  • Na maioria dos casos, controles Windows Forms não oferecem suporte à transformação de escala proporcional. Embora as dimensões gerais do controle sejam dimensionadas, controles filho e elementos componentes do controle podem não redimensionados conforme o esperado. Essa limitação depende de quanto cada controle Windows Forms oferece suporte à transformação de escala.

  • Em uma interface do usuário WPF, você pode alterar o z-order dos elementos para controlar comportamento de sobreposição. Um controle Windows Forms hospedado é desenhado em uma HWND separada, portanto é sempre desenhado por cima de elementos WPF.

  • Controles Windows Forms suportam autoescala baseada no tamanho da fonte. Em uma interface do usuário WPF, alterar o tamanho da fonte não redimensiona o layout inteiro, embora elementos individuais possam redimensionar dinamicamente.

Propriedades de Ambiente

Algumas das propriedades de ambiente de controles WPF têm equivalentes Windows Forms. Essas propriedades de ambiente são propagadas para os controles Windows Forms hospedados e expostas como propriedades públicas no controle WindowsFormsHost. O controle WindowsFormsHost converte cada propriedade de ambiente WPF em seu Windows Forms equivalente.

Para obter mais informações, consulte Formulários do Windows e mapeamento de propriedades do WPF.

Comportamento

A tabela a seguir descreve o comportamento de interoperação.

Comportamento

Suportado

Sem suporte

Transparência

Renderização de controle Windows Forms oferece suporte à transparência. O plano de fundo do controle pai WPF pode se tornar o plano de fundo de controles Windows Forms hospedados.

Alguns controles Windows Forms não têm suporte para transparência. Por exemplo, os controles TextBox e ComboBox não serão transparentes quando hospedados por WPF.

Tabulação

A ordem de tabulação de controles Windows Forms hospedados é igual a quando esses controles são hospedados em um aplicativo baseado em Windows Forms.

Alternando de um controle WPF para um controle Windows Formscom a tecla TAB e teclas SHIFT+TAB funciona da maneira habitual.

Controles Windows Forms que têm um valor da propriedade TabStop de false não recebem o foco quando o usuário alterna pelos controles.

  • Cada controle WindowsFormsHost tem um valor TabIndex, que determina quando aquele controle WindowsFormsHost receberá o foco.

  • Controles Windows Forms que estão contidos em um contêiner WindowsFormsHost seguem a ordem especificada pela propriedade TabIndex. Alternar do último índice de tabulação coloca o foco no próximo controle WPF, se houver. Se nenhum outro controle WPF que pode receber o foco existir, tabular retorna para o primeiro controle Windows Forms na ordem de tabulação.

  • Os valores TabIndex dos controles dentro de WindowsFormsHost são relativas a controles Windows Forms irmãos que estão contidos no controle WindowsFormsHost.

  • Tabular honra comportamento específico de controle. Por exemplo, pressionando a tecla TAB em um controle TextBoxque tenha um valor da propriedade AcceptsTab de true insere tabulação na caixa de texto ao invés de mover o foco.

Não aplicável.

Navegação com teclas de direção

  • Navegação com teclas de direção no WindowsFormsHost controle é o mesmo um comum Windows Forms controle de contêiner: As teclas de seta para a esquerda e seta para cima, selecione o controle anterior e as teclas para a para baixo e para a direita selecionar o próximo controle.

  • As teclas seta para cima e seta para a esquerda do primeiro controle que está contido no controle WindowsFormsHost executa a mesma ação que o atalho de teclado SHIFT+TAB. Se houver um controle WPF que pode receber o foco, este é movido para fora do controle WindowsFormsHost. Esse comportamento difere do comportamento padrão ContainerControl em que não há continuação automática para o último controle. Se nenhum outro controle WPF que pode receber foco existir, este retorna para o último controle Windows Forms na ordem de tabulação.

  • As teclas seta para baixo e seta para a direita no último controle que está contido no controle WindowsFormsHost executam a mesma ação que a tecla TAB. Se houver um controle WPF que pode receber o foco, este é movido para fora do controle WindowsFormsHost. Esse comportamento difere do comportamento padrão ContainerControl em que não há continuação automática para o primeiro controle. Se nenhum outro controle WPF que pode receber foco existir, este retorna para o primeiro controle Windows Forms na ordem de tabulação.

Não aplicável.

Aceleradores

Aceleradores funcionam como de costume, exceto onde observado na coluna "Não suportado".

Aceleradores duplicados entre tecnologias não funcionam como aceleradores duplicados comuns. Quando um acelerador é duplicado entre tecnologias, com pelo menos um em um controle Windows Forms e o outro em um controle WPF , o controle Windows Forms sempre recebe o acelerador. O foco não alterna entre os controles quando o acelerador duplicado é pressionado.

Teclas de atalho

Teclas de atalho funcionam como de costume, exceto onde observado na coluna "Não suportado".

  • Teclas de atalho Windows Forms que são tratadas no estágio de pré-processamento sempre têm precedência sobre teclas de atalho WPF. Por exemplo, se você tiver um controle ToolStrip com teclas de atalho Ctrl + S definidas e não há um comando WPF vinculado ao CTRL+S, o tratador de controle ToolStrip é sempre chamado primeiro, independentemente do foco.

  • Teclas de atalho Windows Forms que são tratadas pelo evento KeyDown são processadas por último em WPF. Você pode evitar esse comportamento, substituindo o método IsInputKey do controle Windows Forms ou tratando o evento PreviewKeyDown. Retorne true do método IsInputKey, ou defina o valor da propriedade PreviewKeyDownEventArgs.IsInputKey como true no seu tratador do evento PreviewKeyDown.

AcceptsReturn, AcceptsTab e outros comportamentos de controle específicos

Propriedades que alteram o comportamento padrão do teclado funcionam como de costume, considerando que o controle Windows Forms sobrescreve o método IsInputKey para retornar true.

Controles Windows Forms que alteram o comportamento padrão de teclado ao tratar o evento KeyDown são processadas por último no controle WPF hospedeiro. Como esses controles são processados por último, eles podem produzir um comportamento inesperado.

Eventos de Entrar e Sair

Quando o foco não estiver indo para o controle ElementHost que contém, os eventos de Entrar e Sair são disparados como de costume quando o foco muda em um único controle WindowsFormsHost.

Eventos de Entrar e Sair não são disparados quando ocorrem as seguintes alterações de foco:

Multiencadeamento

Todas as variedades de multithreading são suportadas.

Ambas as tecnologias Windows Forms e WPF assumem um modelo de concorrência de segmento único. Durante a depuração, chamadas para objetos do framework de outros segmentos irão disparar uma exceção para impor essa exigência.

Segurança

Todos os cenários de interoperação requerem confiança total.

Nenhum cenário de interoperação é permitido em confiança parcial.

Acessibilidade

Todos os cenários de acessibilidade são suportados. Produtos de tecnologia assistencial funcionam corretamente quando eles são usados para aplicativos híbridos que contêm tanto controles Windows Forms como WPF.

Não aplicável.

Área de transferência

Todas as operações da área de transferência funcionam da maneira habitual. Isso inclui recorte e colagem entre controles Windows Forms e WPF .

Não aplicável.

Recurso de arrastar-e-soltar

Todas as operações de arrastar-e-soltar funcionam da maneira habitual. Isso inclui operações entre controles Windows Forms e WPF .

Não aplicável.

Hospedagem de Controles Windows Presentation Foundation para Aplicativos baseados em Windows Forms

Os seguintes cenários de interoperabilidade são suportados quando um controle Windows Forms hospeda um controle WPF:

  • Hospedando um ou mais controles WPF usando código.

  • Associando um folha de propriedades a um ou mais controles WPF hospedados.

  • Hospedando uma ou mais páginas WPF em um formulário.

  • Iniciando uma janela WPF.

  • Hospedando um formulário mestre/detalhes com um Windows Forms mestre e detalhes WPF.

  • Hospedando um formulário mestre/detalhes com um WPF mestre e detalhes Windows Forms.

  • Hospedando controles WPF personalizados.

  • Hospedando controles híbridos.

Propriedades de Ambiente

Algumas das propriedades de ambiente de controles Windows Forms têm equivalentes WPF. Essas propriedades de ambiente são propagadas para os controles WPF hospedados e expostas como propriedades públicas no controle ElementHost. O controle ElementHost converte cada propriedade de ambiente Windows Forms em seu WPF equivalente.

Para obter mais informações, consulte Formulários do Windows e mapeamento de propriedades do WPF.

Comportamento

A tabela a seguir descreve o comportamento de interoperação.

Comportamento

Suportado

Sem suporte

Transparência

Renderização de controle WPF oferece suporte à transparência. O plano de fundo do controle pai Windows Forms pode se tornar o plano de fundo de controles WPF hospedados.

Não aplicável.

Multiencadeamento

Todas as variedades de multithreading são suportadas.

Ambas as tecnologias Windows Forms e WPF assumem um modelo de concorrência de segmento único. Durante a depuração, chamadas para objetos do framework de outros segmentos irão disparar uma exceção para impor essa exigência.

Segurança

Todos os cenários de interoperação requerem confiança total.

Nenhum cenário de interoperação é permitido em confiança parcial.

Acessibilidade

Todos os cenários de acessibilidade são suportados. Produtos de tecnologia assistencial funcionam corretamente quando eles são usados para aplicativos híbridos que contêm tanto controles Windows Forms como WPF.

Não aplicável.

Área de transferência

Todas as operações da área de transferência funcionam da maneira habitual. Isso inclui recorte e colagem entre controles Windows Forms e WPF .

Não aplicável.

Recurso de arrastar-e-soltar

Todas as operações de arrastar-e-soltar funcionam da maneira habitual. Isso inclui operações entre controles Windows Forms e WPF .

Não aplicável.

Consulte também

Conceitos

Demonstra Passo a passo: Hospedagem de um controle composto do Windows Forms no Windows Presentation Foundation

Demonstra Passo a passo: Hospedagem de um controle Windows Presentation Foundation no Windows Forms

Formulários do Windows e mapeamento de propriedades do WPF

Referência

ElementHost

WindowsFormsHost