Compartilhar via


Interoperação do WPF e do Windows Forms

O WPF e o Windows Forms apresentam duas arquiteturas diferentes para criar interfaces de aplicativo. O namespace System.Windows.Forms.Integration fornece classes que permitem cenários comuns de interoperação. As duas classes-chave que implementam recursos de interoperação são WindowsFormsHost e ElementHost. Este tópico descreve quais cenários de interoperação têm suporte e quais cenários não têm suporte.

Observação

É dada consideração especial ao cenário de controle híbrido . Um controle híbrido possui um controle de uma tecnologia incorporado em um controle da outra tecnologia. Isso também é chamado de uma interoperação aninhada. Um controle multinível híbrido tem mais de um nível de aninhamento híbrido de controles. Um exemplo de uma interoperação aninhada de vários níveis é um controle do Windows Forms que contém um controle WPF, que contém outro controle do Windows Forms. Não há suporte para controles híbridos multinível.

Hospedando controles do Windows Forms no WPF

Os seguintes cenários de interoperação têm suporte quando um controle WPF hospeda um controle do Windows Forms:

  • O controle WPF pode hospedar um ou mais controles do Windows Forms usando XAML.

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

  • Ele pode hospedar controles de contêiner do Windows Forms que contêm outros controles do Windows Forms.

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

  • Ele pode hospedar um formulário mestre/detalhe com um componente mestre no Windows Forms e componentes de detalhe no WPF.

  • Ele pode hospedar um ou mais controles ActiveX.

  • Ele pode hospedar um ou mais controles compostos.

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

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

Suporte de layout

A lista a seguir descreve as limitações conhecidas quando o elemento WindowsFormsHost tenta integrar seu controle hospedado do Windows Forms ao sistema de layout do 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 ComboBox do Windows Forms dá suporte a apenas uma única altura, que é definida pelo tamanho da fonte do controle. Em um layout dinâmico do WPF, que pressupõe que os elementos podem se esticar verticalmente, um controle ComboBox hospedado não se esticará como esperado.

  • Os controles do Windows Forms não podem ser girados ou distorcidos. Por exemplo, quando você gira sua interface do usuário em 90 graus, os controles hospedados do Windows Forms manterão sua posição vertical.

  • Na maioria dos casos, os controles do Windows Forms não dão suporte ao dimensionamento proporcional. Embora as dimensões gerais do controle sejam dimensionadas, os controles filho e os elementos de componentes do controle podem não ser redimensionados conforme o esperado. Essa limitação depende de quão bem cada controle do Windows Forms dá suporte ao dimensionamento.

  • Em uma interface do usuário do WPF, você pode alterar a ordem z dos elementos para controlar o comportamento sobreposto. Um controle do Windows Forms hospedado é desenhado em uma HWND separada, portanto, é sempre desenhado na parte superior dos elementos WPF.

  • Os controles do Windows Forms dão suporte ao dimensionamento automático com base no tamanho da fonte. Em uma interface do usuário do WPF, alterar o tamanho da fonte não redimensiona todo o layout, embora elementos individuais possam redimensionar dinamicamente.

Propriedades do ambiente

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

Para obter mais informações, consulte Windows Forms e Mapeamento de Propriedades do WPF.

Comportamento

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

Comportamento Suportado Sem suporte
Transparência A renderização de controle do Windows Forms dá suporte à transparência. A tela de fundo do controle WPF pai pode se tornar a tela de fundo dos controles hospedados do Windows Forms. Alguns controles do Windows Forms não dão suporte à transparência. Por exemplo, os controles TextBox e ComboBox não serão transparentes quando hospedados pelo WPF.
Tabulação A ordem de tabulação para controles hospedados do Windows Forms é a mesma de quando esses controles são hospedados em um aplicativo baseado em Windows Forms.

A tabulação de um controle WPF para um controle do Windows Forms com a tecla TAB e as teclas SHIFT+TAB funciona normalmente.

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

- Cada controle WindowsFormsHost tem um valor TabIndex, que determina quando esse controle WindowsFormsHost receberá foco.
- Os controles do Windows Forms contidos em um contêiner de WindowsFormsHost seguem a ordem especificada pela propriedade TabIndex. A movimentação pelo último índice de guias coloca o foco no próximo controle WPF, se houver. Se não houver nenhum outro controle WPF focalizável, a tabulação retornará ao primeiro controle do Windows Forms na ordem de tabulação.
- Valores de TabIndex para controles dentro do WindowsFormsHost são relativos aos controles irmãos do Windows Forms contidos no controle WindowsFormsHost.
– A tabulação respeita o comportamento específico do controle. Por exemplo, pressionar a tecla TAB em um controle TextBox que tem um valor de propriedade AcceptsTab de true insere uma tabulação na caixa de texto em vez de mover o foco.
Não aplicável.
Navegação com teclas de direção - A navegação com teclas de direção no controle WindowsFormsHost é a mesma que em um controle de contêiner comum do Windows Forms: as teclas SETA para CIMA e SETA PARA A ESQUERDA selecionam o controle anterior e as teclas SETA PARA BAIXO e SETA PARA A DIREITA selecionam o próximo controle.
- As teclas de SETA PARA CIMA e SETA PARA A ESQUERDA do primeiro controle que está contido no controle WindowsFormsHost executam a mesma ação que o atalho de teclado SHIFT+TAB. Se houver um controle WPF focalizável, o foco se deslocará para fora do controle WindowsFormsHost. Esse comportamento é diferente do comportamento padrão de ContainerControl, em que nenhum encapsulamento para o último controle ocorre. Se nenhum outro controle WPF focalizável existir, o foco retornará ao último controle do Windows Forms na ordem de tabulação.
– As setas para baixo e para a direita do último controle que está contido no controle WindowsFormsHost executam a mesma ação que a tecla TAB. Se houver um controle WPF focalizável, o foco se deslocará para fora do controle WindowsFormsHost. Esse comportamento difere do comportamento de ContainerControl padrão em que não ocorre nenhum encapsulamento para o primeiro controle. Se nenhum outro controle WPF focalizável existir, o foco retornará ao primeiro controle do Windows Forms na ordem de tabulação.
Não aplicável.
Aceleradores Os aceleradores funcionam normalmente, exceto quando observados na coluna "Sem suporte". Aceleradores duplicados entre tecnologias não funcionam como aceleradores duplicados comuns. Quando um acelerador é duplicado entre tecnologias, com, pelo menos, um em um controle do Windows Forms e o outro em um controle WPF, o controle do Windows Forms sempre recebe o acelerador. O foco não alterna entre os controles quando o acelerador duplicado é pressionado.
Teclas de atalho As teclas de atalho funcionam normalmente, exceto quando indicadas na coluna "Sem suporte". - As teclas de atalho do Windows Forms que são tratadas no estágio de pré-processamento sempre têm precedência sobre as teclas de atalho do WPF. Por exemplo, se você tiver um controle ToolStrip com teclas de atalho CTRL+S definidas e houver um comando WPF associado a CTRL+S, o manipulador de controle ToolStrip sempre será invocado primeiro, independentemente do foco.
- As teclas de atalho do Windows Forms manipuladas pelo evento KeyDown são processadas por último no WPF. Você pode impedir esse comportamento substituindo o método IsInputKey do controle do Windows Forms ou tratando o evento PreviewKeyDown. Retorne true do método IsInputKey ou defina o valor da propriedade PreviewKeyDownEventArgs.IsInputKey para true no manipulador de eventos PreviewKeyDown.
AcceptsReturn, AcceptsTab e outros comportamentos de controle específicos As propriedades que alteram o comportamento padrão do teclado funcionam normalmente, supondo que o controle do Windows Forms substitua o método IsInputKey para retornar true. Os controles do Windows Forms que alteram o comportamento padrão do teclado manipulando o evento KeyDown são processados por último no controle WPF do host. Como esses controles são processados por último, eles podem produzir um comportamento inesperado.
Eventos de entrada e saída Quando o foco não está indo para o controle recipiente ElementHost, os eventos Entrar e Sair são acionados normalmente quando o foco é alterado em um controle WindowsFormsHost. Os eventos Enter e Leave não são gerados quando as seguintes alterações de foco ocorrem:

– De dentro para fora de um controle WindowsFormsHost.
– De fora para dentro de um controle WindowsFormsHost.
– Fora de um controle WindowsFormsHost.
– De um controle do Windows Forms hospedado em um controle WindowsFormsHost a um controle ElementHost hospedado dentro do mesmo WindowsFormsHost.
Multithreading Todas as variedades de multithreading têm suporte. As tecnologias Windows Forms e WPF pressupõem um modelo de simultaneidade de thread único. Durante a depuração, chamadas para objetos do framework de outros segmentos disparará uma exceção para impor essa exigência.
Segurança Todos os cenários de interoperação exigem total confiança. Nenhum cenário de interoperação é permitido na confiança parcial.
Acessibilidade Todos os cenários de acessibilidade têm suporte. Os produtos de tecnologia adaptativa funcionam corretamente quando são usados para aplicativos híbridos que contêm controles do Windows Forms e do WPF. Não aplicável.
Área de transferência Todas as operações da área de transferência funcionam como de costume. Isso inclui o corte e a colagem entre os controles do Windows Forms e do WPF. Não aplicável.
Função arrastar e soltar Todas as operações de arrastar e soltar funcionam normalmente. Isso inclui operações entre os Controles do Windows Forms e do WPF. Não aplicável.

Hospedando controles do WPF no Windows Forms

Os seguintes cenários de interoperação têm suporte quando um controle do Windows Forms hospeda um controle WPF:

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

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

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

  • Iniciando uma janela do WPF.

  • Hospedando um formulário mestre/detalhe com um componente mestre no Windows Forms e componentes de detalhe no WPF.

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

  • Hospedando controles personalizados do WPF.

  • Hospedando controles híbridos.

Propriedades do ambiente

Algumas das propriedades ambientes dos controles do Windows Forms têm equivalentes do 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 ambiente do Windows Forms para seu equivalente do WPF.

Para obter mais informações, consulte Windows Forms e Mapeamento de Propriedades do WPF.

Comportamento

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

Comportamento Suportado Sem suporte
Transparência A renderização de controle do WPF dá suporte à transparência. A tela de fundo do controle do Windows Forms pai pode se tornar a tela de fundo dos controles hospedados no WPF. Não aplicável.
Multithreading Todas as variedades de multithreading têm suporte. As tecnologias Windows Forms e WPF pressupõem um modelo de simultaneidade de thread único. Durante a depuração, chamadas para objetos do framework de outros segmentos disparará uma exceção para impor essa exigência.
Segurança Todos os cenários de interoperação exigem total confiança. Nenhum cenário de interoperação é permitido na confiança parcial.
Acessibilidade Todos os cenários de acessibilidade têm suporte. Os produtos de tecnologia adaptativa funcionam corretamente quando são usados para aplicativos híbridos que contêm controles do Windows Forms e do WPF. Não aplicável.
Área de transferência Todas as operações da área de transferência funcionam como de costume. Isso inclui o corte e a colagem entre os controles do Windows Forms e do WPF. Não aplicável.
Função arrastar e soltar Todas as operações de arrastar e soltar funcionam normalmente. Isso inclui operações entre os Controles do Windows Forms e do WPF. Não aplicável.

Consulte também