WPF einbinden wie ?



  • Hallo zusammen, ich habe eine einfache Frage. Ich verwende C# .NET WinForms, und möchte eine WPF Klasse mit 3D Funktionalität einbinden. Kann man das?



  • Wenn die WPF Klasse ein eigenes Control ist, geht das mit dem WinForms ElementHost.



  • Kann man eine WPF 3D Programmierung in ein Control packen ?


  • Administrator

    Wenn du unter WPF 3D Programmierung ein Viewport3D meinst, dann kannst du das wahrscheinlich mit ElementHost machen. ElementHost erwartet ein UIElement und davon erbt Viewport3D.

    https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.integration.elementhost



  • Danke Euch, Danke, Danke es klappt wunderbar !!!



  • Soweit schon, aber jetzt ( Sorry nochmals ) : ich kenne mich mit wpf fast gar nicht aus:
    In WinForms:
    UserControl1 us = new UserControl1();
    ElementHost eh = new ElementHost();
    eh.Child = new UserControl1();
    eh.Dock = DockStyle.Fill;
    panel1.Controls.Add(eh);
    us.Funktion1();
    In WPF: eingebunden ins WinFormsProjekt,
    class UserControl1 ...
    ..Funktion1()...
    Background = Brushes.Red;
    das panel1 wird nicht Rot, wieso ? Ich muss mich erst grundlegend reinlesen, und keine dummen Fragen stellen ...



  • Überlege noch mal, ob eh.Child = new UserControl1(); richtig ist?



  • Ja das müsste, vorher habe ich auf dem WFP Fenster nur ein Button mit einem EventHändler in der WPF Klasse UserControl1 gehabt, das ging. Man kann wahrscheinlich die WFP-Klasse im eigenen Projekt haben.



  • und Funktion1() wird aufgerufen !



  • Ja klar wird Funktion1aufgerufen, nur auf dem (unsichtbaren) Objekt us!

    Wenn das jetzt nicht nur ein Flüchtigkeitsfehler bei dir gewesen ist, dann solltest du dir noch mal die Grundlagen über Objekte (bzw. Instanzen) durchlesen und verstehen, was new bedeutet.



  • ja ist klar, soweit verstehe ich das schon, jetzt geht's, danke für den Hinweis !



  • Nur ganz kurz zum Fehler: Im meinem fehlerhaften Programm werden zwei Objektinstanzen von UserControl1 erstellt. Einmal: UserControl1 us = new UserControl1(); und eh.Child = new UserControl1(); Auf dem zweiten Objekt, das an eh.Child gebunden wird, wird nicht Funktion1() aufgerufen, so dass das Panel nicht rot gefärbt wird. Funktion1() wird nur für das erste Objekt aufgerufen, und dies ist nicht das Objekt, das an eh.Child gebunden wurde. Es muss nicht heissen: eh.Child = new UserControl1();, sondern eh.Child = us; Deinen ersten Beitrag habe ich nicht gleich verstanden, aber schön, dass das ganze funktioniert. Da ich WinForms gegenüber WPF bevorzuge, kann ich mit WinForms nun auch 3D Graphik machen. Nochmals Danke Euch !!!


Log in to reply