Frage

A GUI driven Anwendung muss als host für einige vorgefertigte WinForms-basierten Komponenten.Diese Komponenten bieten hohe Leistung, interaktive Ansichten mit einer Mischung von GDI+ und DirectX.Die Ansichten Handgriff-Steuerung die Eingabe und Anzeige benutzerdefinierte grafische Darstellungen.Die Komponenten sind getestet in einem WinForms-Gurt durch den Lieferanten.

Kann ein commericial Anwendung mit WPF für seine GUI und verlassen Sie sich auf WindowsFormsHost Gastgeber der WinForms-Komponenten oder haben Sie Erfahrung von technischen Störungen z.B.input-lags -, update-Probleme, die machen würde Sie zu vorsichtig?

War es hilfreich?

Lösung

Wir verwenden zur Zeit Windows in unserer Software die WinForms Datagridview-Kontrolle zu hosten, und wir haben keine wirklichen Probleme mit ihm haben. Ein paar Dinge zu achten gilt aber:

Die erste ist die Luftraumbeschränkungen . Praktisch bedeutet dies, dass WinForms Inhalt immer oben auf WPF-Inhalt angezeigt. Also, wenn Sie WPF Adornern verwenden, werden sie zu sein scheinen „getrimmt“, wenn sie schlagen gegen einen WinForms Region in Ihrer Anwendung.

Die zweite ist, dass, weil sie Windows-Ressourcen zu nutzen, müssen Sie genauer die Lebensdauern von WinForms-Komponenten verwalten. Im Gegensatz zu WPF Komponenten erwarten WinForms Kontrollen angeordnet werden, wenn sie mit fertig sind. Dies macht es schwierig, sie in einer reinen XAML-Ansicht zu schließen.

Die letzte Sache ist, dass WinForms Kontrollen scheinen nicht so glatt, wie der Rest der WPF-Anzeige, um die Größe. Sie an ihre neue Größe zu schnappen neigen, wenn Sie eine Einstellung beendet haben machen

Andere Tipps

Ein Problem, das ich habe laufen in ist, dass eingebettete Win Forms-Steuerelemente nicht teilnehmen in jeder Transformationsoperationen auf ihre WPF Behälter aufgebracht. Dies führt zu einem visuellen Blinkeffekten und die eingebettete Steuerung in einer innappropriate Lage erscheint. Ich arbeitete um diese durch die Sichtbarkeit der Windows-Forms-Bindung-Host, um die Animation Zustand seiner WPF Behälter, so dass die eingebettete Steuerung versteckt wurde, bis die Animation abgeschlossen ist, wie unten.

<WindowsFormsHost Grid.Row="1" Grid.Column="1" Margin="8,0,0,0"
     Visibility="{Binding ActualHeight, RelativeSource={RelativeSource
     Mode=FindAncestor, AncestorType=UserControl},
     Converter={StaticResource WinFormsControlVisibilityConverter}}" >

     <winforms:DateTimePicker x:Name="datepickerOrderExpected" Width="140"
        Format="Custom" CustomFormat="M/dd/yy  h:mm tt"
        ValueChanged="OnEditDateTimeOrderExpected" />

</WindowsFormsHost>

Ich gehostete WPF-Steuerelemente in WinForms und umgekehrt ohne Probleme. Obwohl, würde ich ausgiebig solche Szenarien testen, weil es schwer vorherzusagen ist, wie komplexe Steuerung verhalten wird.

Sie das Fehlen eines WPF Application Objekt beachten, wenn in WinForms-Hosting. Dies kann zu Problemen führen, wenn Sie eine vorhandene WPF Komponente sind zu nehmen und es in WinForms, da Ressourcen Lookups Hosting und die Gleichen aussehen werden nie in Anwendungsbereich. Sie können Ihr eigenes Application Objekt erstellen, wenn es ein Problem gibt.

Wie @Kent Boogaart erwähnt ich habe in die Situation kommen, wo eine WPF-Anwendung in WinForms gehostet nicht das WPF-Anwendungsobjekt (dh Application.Current) hat. Dies kann viele Probleme verursachen, wie beispielsweise Dispatchers keine Threads zurück zu dem UI-Thread aufrufen. Dies würde nur gelten, wenn Sie in WinForms hosten, nicht umgekehrt.

Ich habe auch seltsame Probleme mit modalen Dialogen seltsam verhalten (das heißt ShowModal nennt). Ich gehe davon aus das liegt daran, in WinForms, jede Kontrolle seiner eigenen Win32 Griff hat, während in WPF gibt es nur einen Griff für das gesamte Fenster ist.

Was auch immer Sie tun, Test:)

Sie können das Airspace Problem lösen, indem .net 3.5 SP1 mit:

  

Diese Arten von Luftraumbeschränkungen   stellt eine erhebliche Einschränkung in einem   Rahmen, wie WPF, in dem Elemente   Zusammensetzung wird verwendet, sehr zu schaffen   an der Benutzerfreundlichkeit. Mit einem D3DImage   Lösung sind diese Einschränkungen nicht   mehr vorhanden!

Siehe Einführung in D3DImage .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top