2009-08-21 3 views
5

Als eine kurzfristige Lösung versuche ich ein Windows-Formular 'Usercontrol' in eine WPF-Anwendung zu jammen. Ich sehe in der WPF-Anwendungsansicht, dass ich dem Projekt ein 'benutzerdefiniertes Windows-Formularsteuerelement' hinzufügen kann und es ein leeres benutzerdefiniertes Steuerelement erstellt, aber ich kann nicht herausfinden, wie es hinzugefügt wird. Idealerweise würde ich gerne wissen, wie ich die .dll aus meinem kompilierten Windows Forms-Benutzersteuerelement nehme und in die WPF-App lege oder das Benutzersteuerelement in die WPF-Anwendung importiere.Wie legt man ein benutzerdefiniertes Windows Forms-Steuerelement in eine WPF-Anwendung?

Danke, Sam

Antwort

7

Sie können es als Steuerelement der Toolbox nicht wirklich hinzufügen, wie Sie könnte für eine Windows Forms-Anwendung. Stattdessen sollten Sie das Benutzersteuerelement in der WPF-Anwendung "hosten".

See how to do it on MSDN.

Hier ist ein Beispiel dafür, wie ein maskiertes Textfeld verwenden (die Sie einfach Ihre individuelle Steuerung ändern können verwenden):

<Window x:Class="Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
Title="HostingWfInWpf"> 
<Grid> 
    <WindowsFormsHost> 
     <wf:MaskedTextBox x:Name="mtbDate" Mask="00/00/0000"/> 
    </WindowsFormsHost> 
</Grid> 
</Window> 
+0

Ich habe diesen Code genau so ausprobiert wie er ist und habe den gleichen Fehler wie oben erwähnt. – Shizam

+0

Haben Sie in Ihrem Ordner "Verweise" einen Verweis auf die Assembly 'System.Windows.Forms' hinzugefügt? – Kredns

+0

Yup, fügte sie zum Referenzordner hinzu. Ich habe mich umgesehen und bin zu der Seite zurückgekehrt, die du verlinkt hast. Dann fand ich heraus, dass die Seite darüber zeigt, wie man ein WF-Steuerelement mit C# anstelle von XAML hinzufügt. Ich habe es ausprobiert und es hat funktioniert, also aus irgendeinem Grund, wenn ich eine WPF-Webanwendung mache, kann ich nicht über XAML arbeiten, aber ich kann über C#. http://msdn.microsoft.com/en-us/library/ms751761.aspx – Shizam

3

einen Verweis auf System.Windows.Forms und WindowsFormsIntegration zu Ihrem Projekt hinzufügen

xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
xmlns:WindowsFormsIntegration="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" 

Und Windows Forms Host in das Fenster platzieren.

<WindowsFormsHost Name="wfhDate" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Stretch"> 
       <WinForms:FlowLayoutPanel/> 
    </WindowsFormsHost> 

Jetzt in C# -Code

using Forms = System.Windows.Forms; 
......................... 
Forms.FlowLayoutPanel flpPanel = this.wfhDate.Child as Forms.FlowLayoutPanel; 
// Initialize your Forms contol here. 
flpPanel.Controls.Add(yourControl); 
+0

@Lucas: Ich habe das XAML von oben genau kopiert und es kompiliert ohne Fehler, ich habe noch nicht den C# -Code eingegeben, da ich nur sicherstellen wollte, dass der XAML funktioniert. Ich die app lief und es abgestürzt ist mit dieser Ausnahme: System.Windows.Markup.XamlParseException wurde nicht behandelt Nachricht: Kann nicht erstellen Instanz von ‚Seite1‘ definiert in der Montage ‚WpfUploaderTwo, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null ". Das Ziel eines Aufrufs hat eine Ausnahme ausgelöst. Fehler in der Markup-Datei 'Page1.xaml' Zeile 1 Position 7. – Shizam

+0

Wenn ich das WindowsFormsHost-Bit nehme, funktioniert es gut. Link zu Code und Fehler: http://bit.ly/aGqfG – Shizam

+0

Ah, also mache ich eine 'WPF Web Application' nicht eine 'WPF Application', nicht sicher, ob das irgendwelche Auswirkungen hat. – Shizam

0

Lucas' Antwort ist richtig, aber ich wollte brauchte etwas hinzuzufügen. Wenn Sie eine Webanwendung erstellen, müssen Sie die Sicherheitseinstellung in Dies ist eine Anwendung mit vollständiger Vertrauensstellung ändern. Ich konnte das WindowsFormsHost-Steuerelement vor dem Ausführen nicht ausführen.

Verwandte Themen