Interoperatività di WPF e Windows Form

WPF e Windows Form presentano due architetture diverse per la creazione di interfacce dell'applicazione. Lo System.Windows.Forms.Integration spazio dei nomi fornisce classi che consentono scenari di interoperabilità comuni. Le due classi chiave che implementano le funzionalità di interoperabilità sono WindowsFormsHost e ElementHost. Questo argomento descrive gli scenari di interoperatività supportati e indica quelli non supportati.

Nota

Particolare attenzione viene dedicata allo scenario del controllo ibrido. Un controllo ibrido è costituito da un controllo di una tecnologia annidato in un controllo di un'altra tecnologia. Questa situazione viene anche definita interoperatività annidata. Un controllo ibrido multilivello prevede più di un livello di annidamento dei controlli ibridi. Un esempio di interoperabilità nidificata a più livelli è un controllo Windows Form che contiene un controllo WPF che contiene un altro controllo Windows Form. 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 Windows Form controlli contenitore che contengono altri controlli Windows Form.

  • Può ospitare un modulo master/dettaglio con un master WPF e Windows Form dettagli.

  • Può ospitare un modulo master/dettagli con un Windows Form master e i 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 tramite il codice.

Supporto del layout

Nell'elenco seguente vengono descritte le limitazioni note quando l'elemento tenta di integrare il WindowsFormsHost 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 estendersi verticalmente, un controllo ospitato ComboBox non verrà esteso come previsto.

  • Windows Form controlli non possono essere ruotati o asimmetrici. 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 vengono ridimensionate, i controlli figlio e gli elementi componente del controllo potrebbero non venire 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 Form ospitato viene disegnato in un HWND separato, quindi viene sempre disegnato sopra gli elementi WPF.

  • Windows Form controlli 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à di ambiente dei controlli WPF hanno Windows Form equivalenti. Queste proprietà di ambiente vengono propagate ai controlli Windows Form ospitati ed esposte come proprietà pubbliche nel WindowsFormsHost controllo. Il WindowsFormsHost controllo converte ogni proprietà di ambiente WPF nel relativo Windows Form equivalente.

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

Comportamento

La tabella seguente descrive il comportamento dell'interoperatività.

Comportamento Supportato Non supportato
Trasparenza Windows Form il rendering dei controlli supporta la trasparenza. Lo sfondo del controllo WPF padre può diventare lo sfondo dei controlli Windows Form ospitati. Alcuni controlli Windows Form non supportano la trasparenza. Ad esempio, i TextBox controlli e ComboBox non saranno trasparenti se ospitati da WPF.
Tabulazione L'ordine di tabulazioni per i controlli Windows Form ospitati è identico a quello in cui tali controlli sono ospitati in un'applicazione basata su Windows Form.

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

Windows Form controlli con valore TabStop della false proprietà non ricevono lo stato attivo quando l'utente esegue tabulazioni tramite controlli.

- Ogni WindowsFormsHost controllo ha un TabIndex valore, che determina quando il WindowsFormsHost controllo riceverà lo stato attivo.
- Windows Form controlli contenuti all'interno di un WindowsFormsHost contenitore seguono l'ordine specificato dalla TabIndex proprietà . La tabulazione dell'ultimo indice di tabulazione sposta lo stato attivo sul controllo WPF successivo, se presente. Se non esiste alcun altro controllo WPF attivabile, la tabulazione torna al primo controllo Windows Form nell'ordine di tabulazione.
- TabIndexi valori per i controlli all'interno di WindowsFormsHost sono relativi ai controlli di pari livello Windows Form contenuti nel WindowsFormsHost controllo .
- La tabulazione rispetta il comportamento specifico del controllo. Ad esempio, premendo tabulazione in un TextBox controllo con valore AcceptsTab della true proprietà viene immessa una scheda nella casella di testo anziché spostare lo stato attivo.
Non applicabile.
Navigazione con i tasti di direzione - Lo spostamento con i tasti freccia nel WindowsFormsHost controllo è uguale a quello di un normale controllo contenitore Windows Form: 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 WindowsFormsHost controllo eseguono la stessa azione della scelta rapida da tastiera MAIUSC+TAB. Se è presente un controllo WPF attivabile, lo stato attivo si sposta all'esterno del WindowsFormsHost controllo. Questo comportamento è diverso dal comportamento standard ContainerControl in quanto non viene eseguito il wrapping all'ultimo controllo. Se non esiste alcun altro controllo WPF attivabile, lo stato attivo torna all'ultimo controllo Windows Form nell'ordine di tabulazione.
- I tasti FRECCIA GIÙ e FRECCIA DESTRA dell'ultimo controllo contenuto nel WindowsFormsHost controllo eseguono la stessa azione del tasto TAB. Se è presente un controllo WPF attivabile, lo stato attivo si sposta all'esterno del WindowsFormsHost controllo. Questo comportamento è diverso dal comportamento standard ContainerControl in quanto non viene eseguito il wrapping al primo controllo. Se non esiste alcun altro controllo WPF attivabile, lo stato attivo torna al primo controllo Windows Form nell'ordine di tabulazione.
Non applicabile.
Acceleratori I tasti di scelta rapida funzionano come di consueto, salvo diversa indicazione nella colonna "Non supportato". I tasti di scelta rapida duplicati tra diverse tecnologie non funzionano come i normali tasti di scelta rapida duplicati. Quando un acceleratore viene duplicato tra le tecnologie, con almeno uno su un controllo Windows Form e l'altro su un controllo WPF, il controllo Windows Form riceve sempre l'acceleratore. Lo stato attivo non passa tra i controlli quando il tasto di scelta rapida duplicato viene premuto.
Combinazioni di tasti Le combinazioni di tasti funzionano come di consueto, salvo diversa indicazione nella colonna "Non supportato". - Windows Form tasti di scelta rapida gestiti nella fase di pre-elaborazione hanno sempre la precedenza sui tasti di scelta rapida WPF. Ad esempio, se si dispone di un ToolStrip controllo con i tasti di scelta rapida CTRL+S definiti ed è presente un comando WPF associato a CTRL+S, il ToolStrip gestore di controlli viene sempre richiamato per primo, indipendentemente dallo stato attivo.
- Windows Form tasti di scelta rapida gestiti dall'evento KeyDown vengono elaborati per ultimo in WPF. È possibile impedire questo comportamento eseguendo l'override del metodo del IsInputKey controllo Windows Form o gestendo l'eventoPreviewKeyDown. Restituisce true dal IsInputKey metodo o imposta il valore della PreviewKeyDownEventArgs.IsInputKey proprietà su true nel PreviewKeyDown gestore eventi.
Comportamento di AcceptsReturn, AcceptsTab e di altri controlli Le proprietà che modificano il comportamento predefinito della tastiera funzionano come di consueto, presupponendo che il controllo Windows Form sostituisci il IsInputKey metodo per restituire true. Windows Form controlli che modificano il comportamento predefinito della tastiera gestendo l'evento KeyDown vengono elaborati per ultimo nel controllo WPF host. Per questo motivo possono generare un comportamento imprevisto.
Eventi Enter e Leave 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 WindowsFormsHost controllo. Gli eventi Enter e Leave non vengono generati quando si verificano i cambiamenti seguenti dello stato attivo:

- Dall'interno all'esterno di un WindowsFormsHost controllo.
- Dall'esterno all'interno di un WindowsFormsHost controllo.
- All'esterno di un WindowsFormsHost controllo.
- Da un controllo Windows Form ospitato in un WindowsFormsHost controllo a un ElementHost controllo ospitato all'interno dello stesso WindowsFormsHostoggetto .
Multithreading Sono supportati tutti i tipi di multithreading. Entrambe le tecnologie Windows Form e WPF presuppongono un modello di concorrenza a thread singolo. Durante il debug, le chiamate agli oggetti framework da altri thread generano un'eccezione per applicare questo requisito.
Sicurezza Tutti gli scenari di interoperatività richiedono l'attendibilità totale. Non sono ammessi scenari di interoperatività con attendibilità parziale.
Accessibilità Sono supportati tutti gli scenari di accessibilità. I prodotti di assistive technology funzionano correttamente quando vengono usati per le applicazioni ibride che contengono sia controlli Windows Form che WPF. Non applicabile.
Appunti 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 trascinamento Tutte le operazioni di trascinamento funzionano come di consueto, Sono incluse operazioni tra 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 finestra 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 Windows Form dettagli.

  • 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 ElementHost controllo. Il ElementHost controllo converte ogni proprietà di ambiente Windows Form nell'equivalente WPF.

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

Comportamento

La tabella seguente descrive il comportamento dell'interoperatività.

Comportamento Supportato Non supportato
Trasparenza Il rendering dei controlli WPF supporta la trasparenza. Lo sfondo del controllo Windows Form padre può diventare lo sfondo dei controlli WPF ospitati. Non applicabile.
Multithreading Sono supportati tutti i tipi di multithreading. Entrambe le tecnologie Windows Form e WPF presuppongono un modello di concorrenza a thread singolo. Durante il debug, le chiamate agli oggetti framework da altri thread generano un'eccezione per applicare questo requisito.
Sicurezza Tutti gli scenari di interoperatività richiedono l'attendibilità totale. Non sono ammessi scenari di interoperatività con attendibilità parziale.
Accessibilità Sono supportati tutti gli scenari di accessibilità. I prodotti di assistive technology funzionano correttamente quando vengono usati per le applicazioni ibride che contengono sia controlli Windows Form che WPF. Non applicabile.
Appunti 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 trascinamento Tutte le operazioni di trascinamento funzionano come di consueto, Sono incluse operazioni tra controlli Windows Form e WPF. Non applicabile.

Vedi anche