Interoperação do WPF e dos Windows Forms

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

Observação

Uma consideração especial é fornecida para o cenário de controle híbrido. Um controle híbrido tem um controle de uma tecnologia aninhado em um controle da outra tecnologia. Isso também é chamado um 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. Controles híbridos multinível não tem suporte.

Hospedando controle dos Windows Forms no WPF

Os seguintes cenários de interoperação são suportados quando um controle WPF hospeda um controle 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/detalhado com um mestre WPF e detalhes do Windows Forms.

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

  • Ele pode hospedar um ou mais controles ActiveX.

  • Ele pode hospedar um ou mais controles de composição.

  • 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 WindowsFormsHost elemento 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 Windows Forms ComboBox oferece suporte a apenas uma única altura, que é definida pelo tamanho da fonte do controle. Em um layout dinâmico WPF, que pressupõe que os elementos podem se estender verticalmente, um controle hospedado ComboBox não se estenderá conforme o 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 oferecem 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 oferece suporte ao dimensionamento.

  • Em uma interface de usuário WPF, você pode alterar a ordem z dos elementos para controlar o comportamento de sobreposição. Um controle hospedado do Windows Forms é desenhado em um HWND separado, portanto, ele é sempre desenhado sobre os elementos do WPF.

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

Propriedades de ambiente

Algumas das propriedades de ambiente dos controles 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 WindowsFormsHost controle. O WindowsFormsHost controle converte cada propriedade de ambiente WPF em seu equivalente do Windows Forms.

Para mais informações, consulte Windows Forms e mapeamento de propriedade do WPF.

Comportamento

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

Comportamento Com suporte Sem suporte
Transparência A renderização do controle Windows Forms oferece suporte à transparência. O plano de fundo do controle WPF pai pode se tornar o plano de fundo dos controles hospedados do Windows Forms. Alguns controles do Windows Forms não oferecem suporte à transparência. Por exemplo, os TextBox controles 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 no Windows Forms.

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

Controles do Windows Forms que têm um TabStop valor de propriedade de não recebem foco quando o usuário guia através de false controles.

- Cada WindowsFormsHost controle tem um TabIndex valor, que determina quando aquele WindowsFormsHost controle receberá foco.
- Os controles do Windows Forms contidos em um WindowsFormsHost contêiner seguem a ordem especificada pela TabIndex propriedade. A tabulação do último índice de tabulação coloca o foco no próximo controle WPF, se houver. Se nenhum outro controle WPF focalizável existir, a tabulação retornará ao primeiro controle do Windows Forms na ordem de tabulação.
- TabIndex valores para controles dentro do são relativos a controles irmãos do WindowsFormsHost Windows Forms que estão contidos no WindowsFormsHost controle.
- A tabulação honra o comportamento específico de controle. Por exemplo, pressionar a tecla TAB em um controle que tem um TextBoxAcceptsTab valor de propriedade de insere uma guia na caixa de texto em vez de true mover o foco.
Não aplicável.
Navegação com teclas de direção - A navegação com as teclas de seta WindowsFormsHost no controle é 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 SETA PARA CIMA e SETA PARA A ESQUERDA do primeiro controle contido no WindowsFormsHost controle executam a mesma ação que o atalho de teclado SHIFT+TAB. Se houver um controle WPF focalizável, o foco se move para fora do WindowsFormsHost controle. Esse comportamento difere do comportamento padrão 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 teclas SETA PARA BAIXO e SETA PARA A DIREITA do último controle contido no WindowsFormsHost controle executam a mesma ação que a tecla TAB. Se houver um controle WPF focalizável, o foco se move para fora do WindowsFormsHost controle. Esse comportamento difere do comportamento padrão ContainerControl em que não ocorre 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 Aceleradores funcionam como de costume, exceto onde observado 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 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 "Sem suporte". - As teclas de atalho do Windows Forms que são manipuladas 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 com teclas de atalho CTRL+S definidas e houver um ToolStrip comando WPF vinculado a CTRL+S, o ToolStrip manipulador de controle será sempre chamado primeiro, independentemente do foco.
- As teclas de atalho do KeyDown Windows Forms que são manipuladas pelo evento são processadas por último no WPF. Você pode impedir esse comportamento substituindo o método do IsInputKey controle Windows Forms ou manipulando o PreviewKeyDown evento. Retorne true do IsInputKey método ou defina o PreviewKeyDownEventArgs.IsInputKey valor da propriedade como true no PreviewKeyDown manipulador de eventos.
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 Windows Forms substitua o IsInputKey método a ser retornado true. Os controles do Windows Forms que alteram o comportamento padrão do teclado manipulando o KeyDown evento são processados por último no controle WPF do host. Como esses controles são processados por último, eles podem produzir um comportamento inesperado.
Entrar e sair de eventos Quando o foco não está indo para o controle de contenção ElementHost , os eventos Enter e Leave são gerados normalmente quando o foco muda em um único WindowsFormsHost controle. Os eventos Enter e Leave não são acionados quando ocorrem as seguintes alterações de foco:

- De dentro para fora um WindowsFormsHost controle.
- De fora para dentro um WindowsFormsHost controle.
- Fora de um WindowsFormsHost controle.
- De um controle do Windows Forms hospedado em um controle para um WindowsFormsHostElementHost controle 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 requerem confiança total. Nenhum cenário de interoperação é permitido em confiança parcial.
Acessibilidade Todos os cenários de acessibilidade tem suporte. Os produtos de tecnologia assistiva funcionam corretamente quando são usados para aplicativos híbridos que contêm controles Windows Forms e WPF. Não aplicável.
Área de transferência Todas as operações da área de transferência funcionam como de costume. Isso inclui recortar e colar entre controles Windows Forms e WPF. Não aplicável.
Recurso do tipo "arrastar e soltar" Todas as operações do tipo "arrastar e soltar" funcionam como de costume. Isso inclui operações entre controles Windows Forms e WPF. Não aplicável.

Hospedando Controles de WPF nos Windows Forms

Os seguintes cenários de interoperação são suportados 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.

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

  • Iniciando uma janela WPF.

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

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

  • Hospedagem de controles WPF personalizados.

  • Hospedando controles híbridos.

Propriedades de ambiente

Algumas das propriedades de ambiente dos controles do 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 ElementHost controle. O ElementHost controle converte cada propriedade de ambiente do Windows Forms em seu equivalente WPF.

Para mais informações, consulte Windows Forms e mapeamento de propriedade do WPF.

Comportamento

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

Comportamento Com suporte Sem suporte
Transparência A renderização do controle WPF oferece suporte à transparência. O plano de fundo do controle pai do Windows Forms pode se tornar o plano de fundo dos controles WPF hospedados. 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 requerem confiança total. Nenhum cenário de interoperação é permitido em confiança parcial.
Acessibilidade Todos os cenários de acessibilidade tem suporte. Os produtos de tecnologia assistiva funcionam corretamente quando são usados para aplicativos híbridos que contêm controles Windows Forms e WPF. Não aplicável.
Área de transferência Todas as operações da área de transferência funcionam como de costume. Isso inclui recortar e colar entre controles Windows Forms e WPF. Não aplicável.
Recurso do tipo "arrastar e soltar" Todas as operações do tipo "arrastar e soltar" funcionam como de costume. Isso inclui operações entre controles Windows Forms e WPF. Não aplicável.

Confira também