Risoluzione dei problemi relativi ad applicazioni ibrideTroubleshooting Hybrid Applications

Questo argomento illustra alcuni problemi comuni che possono verificarsi durante la creazione di applicazioni che usano tecnologie sia WPFWPF, sia Windows FormWindows Forms.This topic lists some common problems that can occur when authoring hybrid applications, which use both WPFWPF and Windows FormWindows Forms technologies.

Sovrapposizione di controlliOverlapping Controls

I controlli potrebbero sovrapporsi in maniera imprevista.Controls may not overlap as you would expect. Windows FormWindows Forms usa un HWND separato per ogni controllo. uses a separate HWND for each control. WPFWPF usa un HWND per tutto il contenuto in una pagina. uses one HWND for all content on a page. Questa differenza di implementazione provoca comportamenti di sovrapposizione imprevisti.This implementation difference causes unexpected overlapping behaviors.

Un controllo Windows FormWindows Forms ospitato in WPFWPF viene sempre visualizzato sopra il contenuto WPFWPF.A Windows FormWindows Forms control hosted in WPFWPF always appears on top of the WPFWPF content.

WPFWPF il contenuto ospitato un ElementHost verrà visualizzato un controllo nell'ordine z del ElementHost controllo. content hosted in an ElementHost control appears at the z-order of the ElementHost control. È possibile sovrapporre ElementHost controlli, ma l'hosting WPFWPF contenuto non combinare o interagire.It is possible to overlap ElementHost controls, but the hosted WPFWPF content does not combine or interact.

Child PropertyChild Property

Il WindowsFormsHost e ElementHost classi possono ospitare solo un singolo controllo o elemento figlio.The WindowsFormsHost and ElementHost classes can host only a single child control or element. Per ospitarne più di uno, è necessario usare un contenitore come contenuto figlio.To host more than one control or element, you must use a container as the child content. Ad esempio, è possibile aggiungere Windows FormWindows Forms controlli pulsante e casella di controllo per un System.Windows.Forms.Panel controllare e quindi assegnare il pannello da un WindowsFormsHost del controllo Child proprietà.For example, you could add Windows FormWindows Forms button and check box controls to a System.Windows.Forms.Panel control, and then assign the panel to a WindowsFormsHost control's Child property. Tuttavia, è possibile aggiungere i controlli pulsante e casella di controllo separatamente allo stesso WindowsFormsHost controllo.However, you cannot add the button and check box controls separately to the same WindowsFormsHost control.

RidimensionamentoScaling

WPFWPF e Windows FormWindows Forms hanno modelli di ridimensionamento diversi. and Windows FormWindows Forms have different scaling models. Alcune trasformazioni di ridimensionamento WPFWPF hanno valore per i controlli Windows FormWindows Forms, ma non tutte.Some WPFWPF scaling transformations are meaningful to Windows FormWindows Forms controls, but others are not. Ad esempio, è possibile ridimensionare un controllo Windows FormWindows Forms fino a 0, ma se si prova a riportare lo stesso controllo su un valore diverso da 0, le dimensioni del controllo rimarranno invariate.For example, scaling a Windows FormWindows Forms control to 0 will work, but if you try to scale the same control back to a non-zero value, the control's size remains 0. Per altre informazioni, vedere Considerazioni sul layout per l'elemento WindowsFormsHost.For more information, see Layout Considerations for the WindowsFormsHost Element.

AdattatoreAdapter

È possibile confusione quando si utilizza il WindowsFormsHost e ElementHost classi, perché includono un contenitore nascosto.There may be confusion when working the WindowsFormsHost and ElementHost classes, because they include a hidden container. Sia il WindowsFormsHost e ElementHost classi dispongono di un contenitore nascosto, chiamato un adapter, utilizzato per ospitare il contenuto.Both the WindowsFormsHost and ElementHost classes have a hidden container, called an adapter, which they use to host content. Per il WindowsFormsHost elemento, l'adapter deriva il System.Windows.Forms.ContainerControl classe.For the WindowsFormsHost element, the adapter derives from the System.Windows.Forms.ContainerControl class. Per il ElementHost (controllo), l'adapter deriva il DockPanel elemento.For the ElementHost control, the adapter derives from the DockPanel element. I riferimenti all'adattatore presenti in altri argomenti sull'interoperabilità alludono a tale contenitore.When you see references to the adapter in other interoperation topics, this container is what is being discussed.

AnnidamentoNesting

Nidificazione di un WindowsFormsHost elemento all'interno di un ElementHost controllo non è supportato.Nesting a WindowsFormsHost element inside an ElementHost control is not supported. Nidificazione di un ElementHost controllo all'interno di un WindowsFormsHost elemento inoltre non è supportato.Nesting an ElementHost control inside a WindowsFormsHost element is also not supported.

Stato attivoFocus

Lo stato attivo funziona in maniera diversa in WPFWPF e Windows FormWindows Forms. Per questo motivo, in un'applicazione ibrida possono verificarsi problemi relativi allo stato attivo.Focus works differently in WPFWPF and Windows FormWindows Forms, which means that focus issues may occur in a hybrid application. Ad esempio, se si dispone dello stato attivo all'interno di un WindowsFormsHost elemento e ridurre al minimo e ripristino della pagina o visualizzare una finestra di dialogo modali, attivo all'interno di WindowsFormsHost elemento potrebbe andare perso.For example, if you have focus inside a WindowsFormsHost element, and you either minimize and restore the page or show a modal dialog box, focus inside the WindowsFormsHost element may be lost. Il WindowsFormsHost elemento ha ancora lo stato attivo, ma il controllo all'interno non consentito.The WindowsFormsHost element still has focus, but the control inside it may not.

Lo stato attivo influisce anche sulla convalida dei dati.Data validation is also affected by focus. Funzionamento della convalida un WindowsFormsHost elemento, ma non funziona come premere tab per uscire il WindowsFormsHost elemento, o tra due diversi WindowsFormsHost elementi.Validation works in a WindowsFormsHost element, but it does not work as you tab out of the WindowsFormsHost element, or between two different WindowsFormsHost elements.

Mapping di proprietàProperty Mapping

Alcuni mapping di proprietà richiedono un'interpretazione estensiva per integrare implementazioni dissimili tra le tecnologie WPFWPF e Windows FormWindows Forms.Some property mappings require extensive interpretation to bridge dissimilar implementations between the WPFWPF and Windows FormWindows Forms technologies. I mapping di proprietà consentono al codice di rispondere alle modifiche apportate ai tipi di carattere, ai colori e ad altre proprietà.Property mappings enable your code to react to changes in fonts, colors, and other properties. In generale, i mapping di proprietà funzionano rimanendo in ascolto di eventi PropertyChanged o chiamate OnPropertyChanged e impostando le proprietà adeguate sul controllo figlio o sul relativo adattatore.In general, property mappings work by listening for either PropertyChanged events or OnPropertyChanged calls, and setting appropriate properties on either the child control or its adapter. Per altre informazioni, vedere Mapping di proprietà di Windows Form e WPF.For more information, see Windows Forms and WPF Property Mapping.

Quando il WindowsFormsHost.Child o ElementHost.Child proprietà viene assegnato, diverse proprietà relative al layout del contenuto ospitato vengono impostate automaticamente.When the WindowsFormsHost.Child or ElementHost.Child property is assigned, several layout-related properties on the hosted content are set automatically. La modifica di queste proprietà di contenuto può determinare comportamenti di layout imprevisti.Changing these content properties can cause unexpected layout behaviors.

Il contenuto ospitato è ancorato per riempire il WindowsFormsHost e ElementHost padre.Your hosted content is docked to fill the WindowsFormsHost and ElementHost parent. Per abilitare questo comportamento di riempimento, durante l'impostazione della proprietà figlio vengono impostate varie proprietà.To enable this fill behavior, several properties are set when you set the child property. La tabella seguente elenca le proprietà del contenuto impostate dal ElementHost e WindowsFormsHost classi.The following table lists which content properties are set by the ElementHost and WindowsFormsHost classes.

Classe hostHost Class Proprietà di contenutoContent Properties
ElementHost Height

Width

Margin

VerticalAlignment

HorizontalAlignment
WindowsFormsHost Margin

Dock

AutoSize

Location

MaximumSize

Non impostare queste proprietà direttamente sul contenuto ospitato.Do not set these properties directly on the hosted content. Per altre informazioni, vedere Considerazioni sul layout per l'elemento WindowsFormsHost.For more information, see Layout Considerations for the WindowsFormsHost Element.

Le applicazioni di navigazione potrebbero non mantenere lo stato dell'utente.Navigation applications may not maintain user state. Il WindowsFormsHost elemento ricrea i propri controlli quando viene utilizzata in un'applicazione di navigazione.The WindowsFormsHost element recreates its controls when it is used in a navigation application. Ricreazione di controlli figlio si verifica quando l'utente si sposta dalla pagina che ospita il WindowsFormsHost elemento e quindi restituisce a esso.Recreating child controls occurs when the user navigates away from the page hosting the WindowsFormsHost element and then returns to it. Qualsiasi contenuto digitato dall'utente andrà perduto.Any content that has been typed in by the user will be lost.

Interoperabilità del ciclo di messaggiMessage Loop Interoperation

Quando si usano i cicli di messaggi Windows FormWindows Forms, i messaggi potrebbero essere elaborati in modo diverso dal previsto.When working with Windows FormWindows Forms message loops, messages may not be processed as expected. Il EnableWindowsFormsInterop metodo viene chiamato dal WindowsFormsHost costruttore.The EnableWindowsFormsInterop method is called by the WindowsFormsHost constructor. Questo metodo aggiunge un filtro messaggi al ciclo di messaggi WPFWPF.This method adds a message filter to the WPFWPF message loop. Questo filtro chiama il Control.PreProcessMessage metodo se un System.Windows.Forms.Control era la destinazione del messaggio e converte o invia il messaggio.This filter calls the Control.PreProcessMessage method if a System.Windows.Forms.Control was the target of the message and translates/dispatches the message.

Se si visualizza un Window in un Windows FormWindows Forms ciclo di messaggi con Application.Run, non è possibile digitare un valore a meno che non si chiama il EnableModelessKeyboardInterop metodo.If you show a Window in a Windows FormWindows Forms message loop with Application.Run, you cannot type anything unless you call the EnableModelessKeyboardInterop method. Il EnableModelessKeyboardInterop metodo accetta un Window e aggiunge un System.Windows.Forms.IMessageFilter, che reindirizza i messaggi relativi alla chiave per la WPFWPF ciclo di messaggi.The EnableModelessKeyboardInterop method takes a Window and adds a System.Windows.Forms.IMessageFilter, which reroutes key-related messages to the WPFWPF message loop. Per altre informazioni, vedere Architettura di input per l'interoperabilità tra Windows Form e WPF.For more information, see Windows Forms and WPF Interoperability Input Architecture.

Opacità e sovrapposizioneOpacity and Layering

La HwndHost classe non supporta la sovrapposizione.The HwndHost class does not support layering. Ciò significa che l'impostazione di Opacity proprietà il WindowsFormsHost elemento non ha alcun effetto e non ci sarà fusione con altri WPFWPF in cui AllowsTransparency impostato su true.This means that setting the Opacity property on the WindowsFormsHost element has no effect, and no blending will occur with other WPFWPF windows which have AllowsTransparency set to true.

DisposeDispose

L'eliminazione non corretta delle classi può determinare una perdita di risorse.Not disposing classes properly can leak resources. Nelle applicazioni ibride, assicurarsi che il WindowsFormsHost e ElementHost classi vengono eliminate o potrebbero verificarsi perdite di risorse.In your hybrid applications, make sure that the WindowsFormsHost and ElementHost classes are disposed, or you could leak resources. Windows FormWindows Forms Elimina ElementHost controlli quando non modale Form padre chiuso. disposes ElementHost controls when its non-modal Form parent closes. WPFWPF Elimina WindowsFormsHost elementi quando l'applicazione viene arrestato. disposes WindowsFormsHost elements when your application shuts down. È possibile visualizzare un WindowsFormsHost elemento in un Window in un Windows FormWindows Forms ciclo di messaggi.It is possible to show a WindowsFormsHost element in a Window in a Windows FormWindows Forms message loop. In questo caso, è possibile che il codice non riceva notifica della chiusura dell'applicazione.In this case, your code may not receive notification that your application is shutting down.

Abilitazione degli stili di visualizzazioneEnabling Visual Styles

Gli stili di visualizzazione Microsoft Windows XPMicrosoft Windows XP di un controllo Windows FormWindows Forms potrebbero non essere abilitati.Microsoft Windows XPMicrosoft Windows XP visual styles on a Windows FormWindows Forms control may not be enabled. Il Application.EnableVisualStyles metodo viene chiamato nel modello per un Windows FormWindows Forms dell'applicazione.The Application.EnableVisualStyles method is called in the template for a Windows FormWindows Forms application. Sebbene questo metodo non venga chiamato per impostazione predefinita, se si usa Visual StudioVisual Studio per creare un progetto si otterranno gli stili di visualizzazione Microsoft Windows XPMicrosoft Windows XP per i controlli, se è disponibile la versione 6.0 di Comctl32.dll.Although this method is not called by default, if you use Visual StudioVisual Studio to create a project, you will get Microsoft Windows XPMicrosoft Windows XP visual styles for controls, if version 6.0 of Comctl32.dll is available. È necessario chiamare il EnableVisualStyles metodo prima che vengano creati gli handle nel thread.You must call the EnableVisualStyles method before handles are created on the thread. Per altre informazioni, vedere Procedura: Abilitare stili di visualizzazione in un'applicazione ibrida.For more information, see How to: Enable Visual Styles in a Hybrid Application.

Controlli con licenzaLicensed Controls

I controlli Windows FormWindows Forms con licenza che mostrano all'utente in una finestra di messaggio le informazioni relative alla licenza potrebbero determinare comportamenti imprevisti in un'applicazione ibrida.Licensed Windows FormWindows Forms controls that display licensing information in a message box to the user might cause unexpected behavior for a hybrid application. Alcuni controlli con licenza visualizzano una finestra di dialogo in risposta alla creazione di handle.Some licensed controls show a dialog box in response to handle creation. Ad esempio, un controllo con licenza potrebbe informare l'utente che è richiesta una licenza oppure che sono consentiti ancora tre usi del controllo a scopo di valutazione.For example, a licensed control might inform the user that a license is required, or that the user has three remaining trial uses of the control.

Il WindowsFormsHost elemento deriva dal HwndHost classe e l'handle del controllo figlio viene creato all'interno di BuildWindowCore metodo.The WindowsFormsHost element derives from the HwndHost class, and the child control’s handle is created inside the BuildWindowCore method. Il HwndHost non consente messaggi da elaborare nella classe di BuildWindowCore (metodo), ma la visualizzazione di una finestra di dialogo fa sì che i messaggi da inviare.The HwndHost class does not allow messages to be processed in the BuildWindowCore method, but displaying a dialog box causes messages to be sent. Per abilitare questo scenario di gestione delle licenze, chiamare il Control.CreateControl metodo sul controllo prima di assegnarlo come il WindowsFormsHost figlio dell'elemento.To enable this licensing scenario, call the Control.CreateControl method on the control before assigning it as the WindowsFormsHost element's child.

WPF DesignerWPF Designer

È possibile progettare contenuto WPF usando WPF Designer per Visual StudioWPF Designer for Visual Studio.You can design your WPF content by using the WPF Designer per Visual StudioWPF Designer for Visual Studio. Le sezioni seguenti elencano alcuni problemi comuni che possono verificarsi durante la creazione di applicazioni ibride con WPF DesignerWPF Designer.The following sections list some common problems that can occur when authoring hybrid applications with the WPF DesignerWPF Designer.

Proprietà BackColorTransparent ignorata in fase di progettazioneBackColorTransparent is ignored at design time

Il BackColorTransparent proprietà potrebbe non funzionare come previsto in fase di progettazione.The BackColorTransparent property might not work as expected at design time.

Se un controllo WPF non è presente su un elemento padre visibile, il runtime WPF ignora il BackColorTransparent valore.If a WPF control is not on a visible parent, the WPF runtime ignores the BackColorTransparent value. Il motivo che BackColorTransparent può essere ignorato perché ElementHost oggetto viene creato in un apposito AppDomain.The reason that BackColorTransparent might be ignored is because ElementHost object is created in a separate AppDomain. Tuttavia, quando si esegue l'applicazione, BackColorTransparent funziona come previsto.However, when you run the application, BackColorTransparent does work as expected.

Visualizzazione dell'elenco errori della fase di progettazione quando viene eliminata la cartella objDesign-time Error List appears when the obj folder is deleted

Se la cartella obj viene eliminata, viene visualizzato l'elenco errori della fase di progettazione.If the obj folder is deleted, the Design-time Error List appears.

Quando si progetta utilizzando ElementHost, Progettazione Windows Form vengono utilizzati file generati nella cartella di Debug o Release all'interno della cartella del progetto obj.When you design using ElementHost, the Windows Forms Designer uses generated files in the Debug or Release folder within your project's obj folder. Se si eliminano questi file, viene visualizzato l'elenco errori della fase di progettazione.If you delete these files, the Design-time Error List appears. Per risolvere questo problema, ricompilare il progetto.To fix this problem, rebuild your project. Per altre informazioni, vedere Errori in fase di progettazione in Progettazione Windows Form.For more information, see Design-Time Errors in the Windows Forms Designer.

ElementHost e IMEElementHost and IME

I controlli WPF ospitato in un ElementHost attualmente non supportano il ImeMode proprietà.WPF controls hosted in an ElementHost currently do not support the ImeMode property. Passa a ImeMode verrà ignorata dai controlli ospitati.Changes to ImeMode will be ignored by the hosted controls.

Vedere ancheSee Also

ElementHost
WindowsFormsHost
Interoperabilità in WPF DesignerInteroperability in the WPF Designer
Architettura di input per l'interoperabilità tra Windows Form e WPFWindows Forms and WPF Interoperability Input Architecture
Procedura: Abilitare stili di visualizzazione in un'applicazione ibridaHow to: Enable Visual Styles in a Hybrid Application
Considerazioni sul layout per l'elemento WindowsFormsHostLayout Considerations for the WindowsFormsHost Element
Mapping di proprietà di Windows Form e WPFWindows Forms and WPF Property Mapping
Errori in fase di progettazione in Progettazione Windows FormDesign-Time Errors in the Windows Forms Designer
Migrazione e interoperabilitàMigration and Interoperability