Interoperabilità WPF e Windows Forms
WPF e Windows Form presentano due architetture diverse per la creazione di interfacce dell'applicazione. Lo spazio dei nomi System.Windows.Forms.Integration fornisce classi che consentono scenari di interoperabilità comuni. Le due classi chiave che implementano le funzionalità di interoperabilità sono WindowsFormsHost e ElementHost. In questo argomento vengono descritti gli scenari di interoperabilità supportati e gli scenari non supportati.
Nota
Viene data particolare considerazione allo scenario di controllo ibrido . Un controllo ibrido incorpora un controllo di una tecnologia all'interno di un controllo dell'altra tecnologia. Questo è anche chiamato interoperabilità annidata . Un controllo ibrido multilivello ha più di un livello di annidamento del controllo ibrido. Un esempio di interoperabilità nidificata 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.
Hosting di controlli Windows Form in WPF
Gli scenari di interoperabilità seguenti sono supportati quando un controllo WPF ospita un controllo Windows Form:
Il controllo WPF può ospitare uno o più controlli Windows Form usando XAML.
Può ospitare uno o più controlli Windows Form usando il codice.
Può ospitare controlli contenitore Windows Forms che contengono altri controlli Windows Forms.
Può ospitare un modulo master/dettaglio con un master WPF e i dettagli di Windows Form.
Può ospitare un modulo master/dettaglio con un master Windows Forms e dettagli WPF.
Può ospitare uno o più controlli ActiveX.
Può ospitare uno o più controlli compositi.
Può ospitare controlli ibridi usando Extensible Application Markup Language (XAML).
Può ospitare controlli ibridi usando il codice.
Supporto layout
Nell'elenco seguente vengono descritte le limitazioni note quando l'elemento WindowsFormsHost tenta di integrare il controllo Windows Form ospitato nel sistema di layout WPF.
In alcuni casi, i controlli Windows Form non possono essere ridimensionati o possono essere ridimensionati solo in dimensioni specifiche. Ad esempio, un controllo windows Form ComboBox supporta solo un'altezza singola, definita dalle dimensioni del carattere del controllo. In un layout dinamico WPF, che presuppone che gli elementi possano allungarsi verticalmente, un controllo ComboBox ospitato non si allungherà come previsto.
I controlli Windows Forms non possono essere ruotati o deformati. Ad esempio, quando si ruota l'interfaccia utente di 90 gradi, i controlli Windows Form ospitati manterranno la posizione verticale.
Nella maggior parte dei casi, i controlli Windows Form non supportano il ridimensionamento proporzionale. Anche se le dimensioni complessive del controllo verranno ridimensionate, i controlli figlio e i componenti del controllo potrebbero non essere ridimensionati come previsto. Questa limitazione dipende dal modo in cui ogni controllo Windows Form supporta il ridimensionamento.
In un'interfaccia utente WPF è possibile modificare l'ordine z degli elementi per controllare il comportamento sovrapposto. Un controllo Windows Forms ospitato viene disegnato in un HWND separato, quindi è sempre disegnato sopra gli elementi WPF.
I controlli Windows Form supportano la scalabilità automatica in base alle dimensioni del carattere. In un'interfaccia utente WPF, la modifica delle dimensioni del carattere non ridimensiona l'intero layout, anche se i singoli elementi possono essere ridimensionati in modo dinamico.
Proprietà di ambiente
Alcune delle proprietà ambientali dei controlli WPF hanno equivalenti nei Windows Forms. Queste proprietà di ambiente vengono propagate ai controlli Windows Form ospitati ed esposte come proprietà pubbliche nel controllo WindowsFormsHost. Il controllo WindowsFormsHost converte ogni proprietà di ambiente WPF nell'equivalente di Windows Form.
Per altre informazioni, vedere Windows Form e mapping delle proprietà WPF.
Comportamento
Nella tabella seguente viene descritto il comportamento di interoperabilità.
Comportamento | Sostenuto | 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 Form non supportano la trasparenza. Ad esempio, i controlli TextBox e ComboBox non saranno trasparenti se ospitati da WPF. |
Tabulazione | L'ordine di tabulazione per i controlli Windows Forms ospitati è identico a quando quei controlli sono ospitati in un'applicazione basata su Windows Forms. La tabulazione da un controllo WPF a un controllo Windows Forms con i tasti TAB e MAIUSC+TAB funziona come di consueto. I controlli Windows Forms con un valore di proprietà TabStop di false non ricevono lo stato attivo quando l'utente esegue tabulazioni attraverso i controlli.- Ogni controllo WindowsFormsHost ha un valore TabIndex, che determina quando il controllo WindowsFormsHost riceverà lo stato attivo. - Controlli Windows Form contenuti all'interno di un contenitore WindowsFormsHost seguono l'ordine specificato dalla proprietà TabIndex. La pressione del tasto Tab dall'ultimo indice di tabulazione sposta il focus sul controllo WPF successivo, se presente. Se non esiste alcun altro controllo WPF attivabile, la tabulazione torna al primo controllo Windows Forms nell'ordine di tabulazione. - TabIndex valori per i controlli all'interno del WindowsFormsHost sono relativi ai controlli Windows Form di pari livello contenuti nel controllo WindowsFormsHost. La tabulazione rispetta il comportamento specifico del controllo. Ad esempio, premendo il tasto TAB in un controllo TextBox con un valore della proprietà AcceptsTab di true viene immessa una tabulazione nella casella di testo anziché spostare lo stato attivo. |
Non applicabile. |
Spostamento con i tasti di direzione | - Lo spostamento con i tasti freccia nel controllo WindowsFormsHost è uguale a quello di un normale controllo contenitore Windows Forms: i tasti freccia su e freccia sinistra selezionano il controllo precedente e i tasti freccia giù e freccia destra selezionano il controllo successivo. - I tasti FRECCIA SU e FRECCIA SINISTRA del primo controllo contenuto nel controllo WindowsFormsHost eseguono la stessa azione della scelta rapida da tastiera MAIUSC+TAB. Se è presente un controllo WPF con possibilità di mettere a fuoco, lo stato attivo viene spostato all'esterno del controllo WindowsFormsHost. Questo comportamento è diverso dal comportamento standard ContainerControl in quanto non avviene nessun passaggio all'ultimo controllo. Se non esiste alcun altro controllo WPF focalizzabile, il focus torna all'ultimo controllo Windows Forms nell'ordine di tabulazione. - I tasti FRECCIA GIÙ e FRECCIA DESTRA dell'ultimo controllo che è contenuto nel controllo WindowsFormsHost eseguono la stessa azione del tasto TAB. Se è presente un controllo WPF focalizzabile, lo stato attivo si sposta all'esterno del controllo WindowsFormsHost. Questo comportamento differisce dal comportamento standard ContainerControl in quanto non si verifica alcun ritorno al primo controllo. Se non esiste alcun altro controllo WPF attivabile, l'attenzione ritorna al primo controllo Windows Forms nell'ordine di tabulazione. |
Non applicabile. |
Acceleratori | Gli acceleratori funzionano come di consueto, tranne dove indicato nella colonna "Non supportato". | Gli acceleratori duplicati nelle tecnologie non funzionano come i normali duplicati. Quando un acceleratore viene duplicato tra le tecnologie, con almeno uno in un controllo Windows Forms e l'altro in un controllo WPF, il controllo Windows Forms riceve sempre l'acceleratore. Il focus non si sposta tra i controlli quando viene premuto il comando rapido duplicato. |
Tasti di scelta rapida | I tasti di scelta rapida funzionano come di consueto, tranne dove indicato nella colonna "Non supportato". | - I tasti di scelta rapida di Windows Form gestiti nella fase di pre-elaborazione hanno sempre la precedenza sui tasti di scelta rapida WPF. Ad esempio, se si dispone di un controllo ToolStrip con i tasti di scelta rapida CTRL+S definiti ed è presente un comando WPF associato a CTRL+S, il gestore del controllo ToolStrip viene sempre richiamato per primo, indipendentemente dal focus. - I tasti di scelta rapida di Windows Form gestiti dall'evento KeyDown vengono elaborati per ultimo in WPF. È possibile evitare questo comportamento eseguendo l'override del metodo di IsInputKey del controllo Windows Form o gestendo l'evento PreviewKeyDown. Restituire true dal metodo IsInputKey oppure impostare il valore della proprietà PreviewKeyDownEventArgs.IsInputKey su true nel gestore eventi PreviewKeyDown. |
AccettaReturn, AccettaTab e altri comportamenti specifici del controllo | Le proprietà che modificano il comportamento predefinito della tastiera funzionano come di consueto, presupponendo che il controllo Windows Forms sostituisca il metodo IsInputKey per restituire true . |
I controlli Windows Form che modificano il comportamento predefinito della tastiera gestendo l'evento KeyDown vengono elaborati per ultimo nel controllo WPF host. Poiché questi controlli vengono elaborati per ultimo, possono produrre un comportamento imprevisto. |
Eventi di ingresso e uscita | Quando lo stato attivo non passa al controllo contenitore ElementHost, gli eventi Enter e Leave vengono generati come di consueto quando lo stato attivo cambia in un singolo controllo WindowsFormsHost. | Gli eventi Enter e Leave non vengono generati quando si verificano le modifiche dello stato attivo seguenti: - Dall'interno all'esterno di un controllo WindowsFormsHost. - Dall'esterno all'interno di un controllo WindowsFormsHost. - All'esterno di un controllo WindowsFormsHost. - Da un controllo Windows Forms ospitato in un controllo WindowsFormsHost a un controllo ElementHost ospitato all'interno dello stesso WindowsFormsHost. |
Multithreading | Sono supportate tutte le varietà di multithreading. | Entrambe le tecnologie Windows Forms e WPF presuppongono un modello di concorrenza a thread singolo. Durante il debug, le chiamate agli oggetti framework da altri thread genereranno un'eccezione per applicare questo requisito. |
Sicurezza | Tutti gli scenari di interoperabilità richiedono l'attendibilità totale. | Non sono consentiti scenari di interoperabilità con attendibilità parziale. |
Accessibilità | Sono supportati tutti gli scenari di accessibilità. I prodotti di assistive technology funzionano correttamente quando vengono usati per applicazioni ibride che contengono controlli Windows Form e WPF. | Non applicabile. |
Appunti | Tutte le operazioni della Clipboard funzionano come di consueto. Sono inclusi il taglio e incolla tra i controlli Windows Form e WPF. | Non applicabile. |
Funzione di trascinamento | Tutte le operazioni di trascinamento della selezione funzionano come di consueto. Sono incluse le operazioni tra i controlli Windows Form e WPF. | Non applicabile. |
Hosting di controlli WPF in Windows Form
Gli scenari di interoperabilità seguenti sono supportati quando un controllo Windows Form ospita un controllo WPF:
Hosting di uno o più controlli WPF tramite codice.
Associazione di una scheda delle proprietà a uno o più controlli WPF ospitati.
Hosting di una o più pagine WPF in un modulo.
Avvio di una finestra WPF.
Hosting di un modulo master/dettaglio con un master Windows Form e i dettagli WPF.
Hosting di un modulo master/dettaglio con un master WPF e i dettagli di Windows Form.
Hosting di controlli WPF personalizzati.
Hosting di controlli ibridi.
Proprietà di ambiente
Alcune delle proprietà di ambiente dei controlli Windows Form hanno equivalenti WPF. Queste proprietà di ambiente vengono propagate ai controlli WPF ospitati ed esposte come proprietà pubbliche nel controllo ElementHost. Il controllo ElementHost converte ciascuna proprietà ambientale di Windows Forms nel suo equivalente WPF.
Per ulteriori informazioni, vedere Windows Forms e il mapping delle proprietà WPF.
Comportamento
Nella tabella seguente viene descritto il comportamento di interoperabilità.
Comportamento | Sostenuto | Non supportato |
---|---|---|
Trasparenza | Il rendering dei controlli WPF supporta la trasparenza. Lo sfondo del controllo Windows Forms padre può anche diventare lo sfondo dei controlli WPF ospitati. | Non applicabile. |
Multithreading | Sono supportate tutte le varietà di multithreading. | Entrambe le tecnologie Windows Forms e WPF presuppongono un modello di concorrenza a thread singolo. Durante il debug, le chiamate agli oggetti framework da altri thread genereranno un'eccezione per applicare questo requisito. |
Sicurezza | Tutti gli scenari di interoperabilità richiedono l'attendibilità totale. | Non sono consentiti scenari di interoperabilità con attendibilità parziale. |
Accessibilità | Sono supportati tutti gli scenari di accessibilità. I prodotti di assistive technology funzionano correttamente quando vengono usati per applicazioni ibride che contengono controlli Windows Form e WPF. | Non applicabile. |
Clipboard | Tutte le operazioni degli Appunti funzionano come di consueto. Sono inclusi il taglio e incolla tra i controlli Windows Form e WPF. | Non applicabile. |
Funzionalità di trascina e rilascia | Tutte le operazioni di trascinamento della selezione funzionano come di consueto. Sono incluse le operazioni tra i controlli Windows Form e WPF. | Non applicabile. |
Vedere anche
.NET Desktop feedback