Condividi tramite


Interoperatività di WPF e Windows Form

WPF e Windows Forms presentano due architetture diverse per la creazione delle interfacce delle applicazioni. Lo spazio dei nomi System.Windows.Forms.Integration fornisce classi che consentono scenari di interazione comuni. Le due classi principali che implementano le capacità di interoperatività sono WindowsFormsHost e ElementHost. In questo argomento vengono descritti gli scenari di interazione supportati e non.

NotaNota

Una considerazione particolare viene data allo scenario di controllo ibrido.Un controllo ibrido dispone di un controllo di una tecnologia annidato in un controllo di un'altra tecnologia.Ciò è anche definito interazione annidata.Un controllo ibrido multilivello dispone di più di un livello di annidamento dei controlli ibridi.Un esempio di interazione annidata a più livelli è un controllo Windows Forms che contiene un controllo WPF, che contiene un altro controllo Windows Forms.I controlli ibridi multilivello non sono supportati:

Nel presente argomento sono contenute le seguenti sezioni.

  • Hosting di controlli Windows Form in WPF
  • Hosting di controlli WPF in Windows Form
  • Argomenti correlati

Hosting di controlli Windows Form in WPF

Sono supportati i seguenti scenari di interoperatività quando un controllo WPF ospita un controllo Windows Forms:

  • Il controllo WPF potrebbe ospitare uno o più controlli Windows Forms mediante XAML.

  • Potrebbe ospitare uno o più controlli Windows Forms utilizzando il codice.

  • Potrebbe ospitare i controlli contenitore Windows Forms che contengono altri controlli Windows Forms.

  • Potrebbe ospitare un form Master-Details con un master WPF e dettagli Windows Forms.

  • Potrebbe ospitare un form Master-Details con un master Windows Forms e dettagli WPF.

  • Potrebbe ospitare uno o più controlli ActiveX.

  • Potrebbe ospitare uno o più controlli composti.

  • Potrebbe ospitare controlli ibridi mediante Extensible Application Markup Language (XAML).

  • Potrebbe ospitare controlli ibridi mediante il codice.

Supporto layout

Nell'elenco riportato di seguito vengono descritte le limitazioni note quando l'elemento WindowsFormsHost tenta di integrare il controllo Windows Forms ospitato nel sistema di layout di WPF.

  • In alcuni casi non è possibile ridimensionare i controlli Windows Forms oppure è possibile ridimensionarli solo in base a dimensioni specifiche. Ad esempio, un controllo Windows Forms ComboBox supporta una sola altezza definita dalla dimensione del carattere del controllo. In un layout dinamico di WPF in cui si suppone che sia possibile estendere gli elementi in verticale, un controllo ComboBox ospitato non verrà esteso nel modo previsto.

  • Non è possibile ruotare o inclinare i controlli Windows Forms. Ad esempio, quando si ruota l'interfaccia utente di 90 gradi, i controlli Windows Forms ospitati manterranno la posizione verticale.

  • Nella maggior parte dei casi i controlli Windows Forms non supportano il ridimensionamento proporzionale. Anche se le dimensioni complessive del controllo vengono ridimensionate, i controlli figlio e gli elementi componente del controllo non possono essere ridimensionati nel modo previsto. Questa limitazione dipende dalla modalità in cui ogni controllo Windows Forms supporta il ridimensionamento.

  • In un'interfaccia utente di WPF è possibile modificare l'ordine Z degli elementi per controllare il comportamento di sovrapposizione. Un controllo Windows Forms ospitato viene tracciato in un elemento HWND separato, in modo che venga disegnato sempre sopra elementi WPF.

  • I controlli Windows Forms supportano il ridimensionamento automatico in base alla dimensione del carattere. In un'interfaccia utente di WPF la modifica della dimensione del carattere non causa il ridimensionamento dell'intero layout, benché sia possibile che vengano ridimensionati singoli elementi.

Proprietà di ambiente

Alcune delle proprietà di ambiente dei controlli WPF hanno equivalenti in Windows Forms. Queste proprietà di ambiente vengono propagate ai controlli Windows Forms ospitati ed esposte come proprietà pubbliche nel controllo WindowsFormsHost. Il controllo WindowsFormsHost converte ogni proprietà di ambiente WPF nell'equivalente Windows Forms.

Per ulteriori informazioni, vedere Mapping di proprietà di Windows Form e WPF.

Comportamento

Nella tabella riportata di seguito vengono descritti i comportamenti di interazione.

Comportamento

Supportato

Non supportato

Trasparenza

Il rendering del controllo Windows Forms supporta la trasparenza. Lo sfondo del controllo WPF padre può diventare lo sfondo dei controlli Windows Forms ospitati.

Alcuni controlli Windows Forms non supportano la trasparenza. Ad esempio, i controlli TextBox e ComboBox non saranno trasparenti quando ospitati da WPF.

Tabulazione

L'ordine di tabulazione per i controlli Windows Forms ospitati è uguale al caso in cui i controlli vengono ospitati in un'applicazione basata su Windows Forms.

La tabulazione da un controllo WPF a un controllo Windows Forms con il tasto TAB e i tasti MAIUSC+TAB funziona come di consueto.

I controlli Windows Forms che dispongono di un valore della proprietà TabStop uguale a false non ricevono lo stato attivo quando l'utente utilizza il tasto TAB per passare da un controllo all'altro.

  • Ogni controllo WindowsFormsHost dispone di un valore TabIndex, che determina il momento in cui il controllo WindowsFormsHost riceverà lo stato attivo.

  • I controlli Windows Forms contenuti all'interno di un contenitore WindowsFormsHost seguono l'ordine specificato dalla proprietà TabIndex. La tabulazione dall'ultimo indice di tabulazione assegna lo stato attivo al controllo WPF successivo, se disponibile. Se non esistono altri controlli WPF attivabili, la tabulazione torna al primo controllo Windows Forms nell'ordine di tabulazione.

  • I valori TabIndex per i controlli interni a WindowsFormsHost sono relativi ai controlli Windows Forms di pari livello contenuti nel controllo WindowsFormsHost.

  • La tabulazione rispetta il comportamento specifico dei controlli. Ad esempio, premendo il tasto TAB in un controllo TextBox che dispone di un valore della proprietà AcceptsTab pari a true si inserisce una tabulazione nella casella di testo invece di spostare lo stato attivo.

Non applicabile.

Spostamento mediante i tasti di direzione

  • Lo spostamento con i tasti di direzione nel controllo WindowsFormsHost è uguale a quello di un controllo contenitore Windows Forms comune, per cui i tasti Freccia SU e Freccia SINISTRA consentono di selezionare il controllo precedente, mentre i tasti Freccia GIÙ e Freccia DESTRA consentono di selezionare il controllo successivo.

  • I tasti Freccia SU e Freccia SINISTRA a partire dal primo controllo contenuto nel controllo WindowsFormsHost consentono di eseguire la stessa azione dei tasti di scelta rapida MAIUSC+TAB. Se è disponibile un controllo WPF attivabile, lo stato attivo viene spostato all'esterno del controllo WindowsFormsHost. Questo comportamento è diverso dal comportamento ContainerControl standard in quando non si verifica alcun ritorno all'ultimo controllo. Se non è disponibile nessun altro controllo WPF attivabile, lo stato attivo torna all'ultimo controllo Windows Forms nell'ordine di tabulazione.

  • I tasti Freccia GIÙ e Freccia DESTRA a partire dall'ultimo controllo contenuto nel controllo WindowsFormsHost consentono di eseguire la stessa azione del tasto TAB. Se è disponibile un controllo WPF attivabile, lo stato attivo viene spostato all'esterno del controllo WindowsFormsHost. Questo comportamento è diverso dal comportamento ContainerControl standard in quando non si verifica alcun ritorno al primo controllo. Se non è disponibile nessun altro controllo WPF attivabile, lo stato attivo torna al primo controllo Windows Forms nell'ordine di tabulazione.

Non applicabile.

Tasti di scelta rapida

I tasti di scelta rapida funzionano come di consueto, a eccezione di quanto indicato nella colonna "Non supportato".

I tasti di scelta rapida duplicati tra le tecnologie non funzionano come i tasti di scelta rapida duplicati comuni. Quando un tasto di scelta rapida viene duplicato tra le tecnologie, con almeno un tasto in un controllo Windows Forms e l'altro in un controllo WPF, il controllo Windows Forms riceve sempre il tasto di scelta rapida. Lo stato attivo non passa tra i controlli quando viene premuto il tasto di scelta rapida duplicato.

Tasti di scelta rapida

I tasti di scelta rapida funzionano come di consueto, a eccezione di quanto indicato nella colonna "Non supportato".

  • I tasti di scelta rapida di Windows Forms gestiti nella fase che precede l'elaborazione hanno sempre la precedenza sui tasti di scelta rapida di WPF. Se ad esempio si dispone di un controllo ToolStrip con i tasti di scelta rapida CTRL+S definiti ed esiste un comando WPF associato a CTRL+S, il gestore del controllo ToolStrip viene sempre richiamato per primo, indipendentemente dallo stato attivo.

  • I tasti di scelta rapida di Windows Forms che sono gestiti dall'evento KeyDown vengono elaborati per ultimi in WPF. È possibile evitare questo comportamento eseguendo l'override del metodo IsInputKey del controllo Windows Forms oppure gestendo l'evento PreviewKeyDown. Restituire true dal metodo IsInputKey o impostare il valore della proprietà PreviewKeyDownEventArgs.IsInputKey su true nel gestore eventi PreviewKeyDown.

AcceptsReturn, AcceptsTab e altri comportamenti specifici dei controlli

Le proprietà che cambiano il comportamento predefinito della tastiera funzionano come di consueto, supponendo che il controllo Windows Forms esegua l'override del metodo IsInputKey per restituire true.

I controlli Windows Forms che modificano il comportamento predefinito della tastiera gestendo l'evento KeyDown vengono elaborati per ultimi nel controllo WPF host. Dato che questi controlli vengono elaborati per ultimi, possono dare un comportamento imprevisto.

Eventi Enter e Leave

Quando lo stato attivo non passa al controllo ElementHost contenitore, gli eventi Enter e Leave vengono generati come nel caso in cui lo stato attivo cambi in un singolo controllo WindowsFormsHost.

Gli eventi Enter e Leave non vengono generati quando si verificano le seguenti modifiche dello stato attivo:

Multithreading

Sono supportati tutti i tipi di multithreading.

Entrambe le tecnologie Windows Forms e WPF presuppongono un unico modello di concorrenza a thread singolo. Durante il debug la chiamata agli oggetti framework da altri thread genera un'eccezione per imporre questo requisito.

Sicurezza

Tutti gli scenari di interazione richiedono attendibilità totale.

A nessuno scenario di interazione è consentita un'attendibilità parziale.

Accessibilità

Sono supportati tutti gli scenari di accessibilità. I prodotti tecnologici di assistenza funzionano correttamente quando utilizzati per applicazioni ibride che contengono sia i controlli Windows Forms che i controlli WPF.

Non applicabile.

Appunti

Tutte le operazioni relative agli Appunti funzionano come di consueto. Sono comprese le operazioni di ritaglio e di incollamento tra i controlli Windows Forms e WPF.

Non applicabile.

Funzionalità di trascinamento della selezione

Tutte le operazioni di trascinamento della selezione funzionano come di consueto. Sono comprese operazioni tra i controlli Windows Forms e WPF.

Non applicabile.

Hosting di controlli WPF in Windows Form

Sono supportati i seguenti scenari di interoperatività quando un controllo Windows Forms ospita un controllo WPF:

  • Hosting di uno o più controlli WPF mediante il codice.

  • Associazione di una finestra delle proprietà a uno o più controlli WPF ospitati.

  • Hosting di una o più pagine WPF in un form.

  • Avvio di una finestra WPF.

  • Hosting di un form Master-Details con un master Windows Forms e dettagli WPF.

  • Hosting di un form Master-Details con un master WPF e dettagli Windows Forms.

  • Hosting di controlli WPF personalizzati.

  • Hosting di controlli ibridi.

Proprietà di ambiente

Alcune proprietà di ambiente dei controlli Windows Forms hanno equivalenti in WPF. Queste proprietà di ambiente vengono propagate ai controlli WPF ospitati ed esposte come proprietà pubbliche nel controllo ElementHost. Il controllo ElementHost converte ogni proprietà di ambiente Windows Forms nell'equivalente WPF.

Per ulteriori informazioni, vedere Mapping di proprietà di Windows Form e WPF.

Comportamento

Nella tabella riportata di seguito vengono descritti i comportamenti di interazione.

Comportamento

Supportato

Non supportato

Trasparenza

Il rendering del controllo WPF supporta la trasparenza. Lo sfondo del controllo Windows Forms padre può diventare lo sfondo dei controlli WPF ospitati.

Non applicabile.

Multithreading

Sono supportati tutti i tipi di multithreading.

Entrambe le tecnologie Windows Forms e WPF presuppongono un unico modello di concorrenza a thread singolo. Durante il debug la chiamata agli oggetti framework da altri thread genera un'eccezione per imporre questo requisito.

Sicurezza

Tutti gli scenari di interazione richiedono attendibilità totale.

A nessuno scenario di interazione è consentita un'attendibilità parziale.

Accessibilità

Sono supportati tutti gli scenari di accessibilità. I prodotti tecnologici di assistenza funzionano correttamente quando utilizzati per applicazioni ibride che contengono sia i controlli Windows Forms che i controlli WPF.

Non applicabile.

Appunti

Tutte le operazioni relative agli Appunti funzionano come di consueto. Sono comprese le operazioni di ritaglio e di incollamento tra i controlli Windows Forms e WPF.

Non applicabile.

Funzionalità di trascinamento della selezione

Tutte le operazioni di trascinamento della selezione funzionano come di consueto. Sono incluse operazioni tra i controlli Windows Forms e WPF.

Non applicabile.

Vedere anche

Attività

Procedura dettagliata: hosting di controlli Windows Form in WPF

Riferimenti

ElementHost

WindowsFormsHost

Concetti

Procedura dettagliata: hosting di controlli Windows Form compositi in WPF

Procedura dettagliata: hosting di controlli compositi di WPF in Windows Form

Mapping di proprietà di Windows Form e WPF