WPF Form in Windows Forms Multi Document Interface
Hallo,
Ich würde gerne eine WPF Form in eine Windows Forms Anwendung einbauen. Diese soll in einen Multi Document Interface fernster angezeigt werden. Ist sowas möglich?
Gruß an die IT-Welt,
J Herbrich
Ich würde gerne eine WPF Form in eine Windows Forms Anwendung einbauen. Diese soll in einen Multi Document Interface fernster angezeigt werden. Ist sowas möglich?
Gruß an die IT-Welt,
J Herbrich
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 343064
Url: https://administrator.de/contentid/343064
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
11 Kommentare
Neuester Kommentar
Servus @Herbrich19,
Kannst du machen, z.B. so
Folgende Verweise müssen dem WinForms-Projekt hinzugefügt werden damit dort WPF nutzbar wird:
Grüße Uwe
Kannst du machen, z.B. so
using System;
using System.Windows.Forms;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Interop;
using System.Runtime.InteropServices;
namespace WinformsMDIwithWPFChild {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
[DllImport("user32.dll")]
public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
private void Form1_Load(object sender, EventArgs e) {
//Add WPF Window
WPFWindow w = new WPFWindow();
System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(w);
WindowInteropHelper helper = new WindowInteropHelper(w);
helper.Owner = this.Handle;
w.Show();
SetParent(helper.Handle, this.Handle);
}
}
// class creates WPF Window
public class WPFWindow : Window {
private Canvas canvas = new Canvas();
private TextBlock block = new TextBlock();
public WPFWindow() {
this.WindowStyle = WindowStyle.ToolWindow;
this.Background = System.Windows.Media.Brushes.White;
this.Width = 250;
this.Height = 250;
canvas.Width = this.Width;
canvas.Height = this.Height;
canvas.Background = System.Windows.Media.Brushes.White;
block.Text = "WPF";
block.FontSize = 20;
canvas.Children.Add(block);
this.Content = canvas;
}
}
}
- PresentationCore
- PresentationFramework
- System.Xaml
- WindowsBase
- WindowsFormsIntegration
Grüße Uwe
Ja, klar das war ja nur ein simples Beispiel, selbstverständlich kannst du stattdessen deine Form mit bestehendem XAML Code bauen, du kannst auch beliebige EXEs in die Anwendung einsperren, wenn sie als Parent deine App gesetzt bekommen, sind dann zwar keine richtigen MDI-Windows aber fühlen sich dann zumindest so an.
Ich würde dir aber trotzdem dazu raten in Zukunft komplett auf WPF umzustellen.
Ich würde dir aber trotzdem dazu raten in Zukunft komplett auf WPF umzustellen.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Klar, bis auf das die Eigenschaft MDI-Container der Form gesetzt wurde hat sie keinen Inhalt.
um dan in deren load die WPF zu öffnen oder lese ich den Code falsch?
Ja.Zitat von @Herbrich19:
Hallo,
Hmm, die Lösung ist zwar gut aber ich würde doch gerne auf eine Lere Windows Form verzichten. Kann ich diese ansonsten auch weglassen (also den Show befehl für die Windows Form?
? Wie willst du ein WPF Window in einen MDI Container packen wenn du keine Form hast die den MDI-Container hostet ?? Irgendwie verstehst du da was falsch. Im Code oben ist eine Windows Form der Parent als MDI Container. Dann wird eine WPF Form im Code erzeugt, angezeigt und dessen Parent auf die Windows Form gelegt, nicht mehr und nich weniger. Das Linke Fenster das du im MDI Container siehst ist nicht im Code enthalten das war nur zur Veranschaulichung im Bild.Hallo,
Hmm, die Lösung ist zwar gut aber ich würde doch gerne auf eine Lere Windows Form verzichten. Kann ich diese ansonsten auch weglassen (also den Show befehl für die Windows Form?
Mein erster versuch mit WPF Controls war ja im der dass ich keine Animation in form von KeyFrames laufen lassen kann in ein Control was mich zu den Forms bringt.
?? Geht völlig am Thema vorbei, sorry. Und WPF bietet sehr wohl deutlich mehr Funktionalität in diese Richtung, nur ist bei WPF im Allgemeinen mehr Abstrahierung in Datenmodelle und Klassen das Maß der Dinge, dadurch aber auch portabel in diverse Formate und Platformen.Also lass den Mischmasch und fackel es gleich mit WPF ab, damit bleibst du flexibel in alle Richtungen, auch wenn es vielleicht am Anfang Umdenken erfordert.