Winforms-Steuerelement einfügen/hosten

  • WPF

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Winforms-Steuerelement einfügen/hosten

    Mahlzeit zusammen,

    ich möchte ein WinForms-Steuerelement in eine WPF einbauen.

    Bisher hab ich Folgendes:

    VB.NET-Quellcode

    1. Imports System.Windows.Forms
    2. Class MainWindow
    3. Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    4. Dim host As New Forms.Integration.WindowsFormsHost()
    5. Dim Wellenform1 As New PictureBox
    6. End Sub
    7. End Class


    und das:

    XML-Quellcode

    1. <Grid>
    2. <WindowsFormsHost Name="MeinHost" Child="{DynamicResource Wellenform1}"/>
    3. </Grid>



    Leider kommt da der Fehler:
    "DynamicResourceExtension" kann nicht für die Eigenschaft "Child" vom Typ "WindowsFormsHost" festgelegt werden. "DynamicResourceExtension" kann nur für eine "DependencyProperty" eines "DependencyObject" festgelegt werden.

    Kann mir jemand helfen?

    Problemstellung:

    Ich habe in Winforms eine Klasse geschrieben, die von PictureBox erbt. Leider gibt es ja in WPF keine Pictureboxen mehr, folglich wird das nicht funktionieren. Jetzt könnte ich ja einfach den Code umschreiben, dass er von Image erbt, bloss ich kann viele Eigenschaften der PictureBox nicht so einfach übersetzen...
    Hallo

    Klassisches Beispiel von "Mit dem Pfeil durch die Brust und beim auge wieder raus".

    Das du ein Control nicht als Resource einfügen kannst sollte klar sein (zumindest wenn du meine Tutorialreihe durch hast).
    Wie man dennoch ein Winforms Control hosten kann sollte für dich auch kein Problem darstellen. Wenn ich das Google kommt folgendes als erstes Ergebnis: docs.microsoft.com/en-us/dotne…w=netframeworkdesktop-4.8

    Die viel bessere Frage ist ja warum man eine Picturebox aus WinForms einbinden will. Es ist richtig das es keine Pictureboxx mehr gibt. Aber nur deshalb weil diese unter WPF "Image" heist. :P Das hasst du ja auch gut erkannt, aber da die WPF viele andere Funktionen hast welche es unter WinForms eben nicht gibt (Paths z.b. kennst du ja auch schon) denke ich das du weder Image noch eine Picturebox benötigst.
    Die Frage wäre was genau du vor hast und ob dies nicht mit WPF Boardmitteln besser geht. Muss natürlich nicht sein, oft ist es aber dennoch so.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @Nofear23m

    Ja diese Seite aus den Microsoft Docs kenne ich schon. Hast recht, eigentlich kein Problem für mich. Wo ich aber an meine Grenzen gestossen bin, war die Zeile:

    VB.NET-Quellcode

    1. Me.grid1.Children.Add(host)


    Eigentlich verständlich, bloss will ich ja nicht, dass meine PictureBox dann das ganze Grid ausfüllt, sondern am liebsten wärs mir, ich könnte sie wie ein WPF Control ganz einfach in XAML einbinden und die Propertys einbinden und sie dann wie ein ganz normales WPF Control zu behandeln.

    Ich möchte mit Hilfe der bass.dll eine Waveform zeichnen, was relativ codeaufwändig ist, also hab ich das Ganze in eine separate Klasse umgeschrieben. Die Propertys sind halt einfach "nicht komaptibel"...
    Du kannst doch keine nicht-WPF Controls deklarativ erstellen.

    Das geht nur per Code. aber per Code kannst du es auch so positionieren wie unter XAML.
    Wenn du schreibst was dein problem ist dann können wir eine Lösung finden.

    PS: Du willst wohl nicht verraten warum genau du eine Picturebox nehmen willst. Du siehst ja das du dir hier nur Probleme einhandelst. Aber wer nicht hören will muss fühlen. 8-)

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    PS: Du willst wohl nicht verraten warum genau du eine Picturebox nehmen willst. Du siehst ja das du dir hier nur Probleme einhandelst. Aber wer nicht hören will muss fühlen.

    Doch: Will ich gar nicht glaub mir, am liebsten wäre mir auch ein Image. Bloss ist der Code zum Erstellen der Waveform nicht von mir, und voll von PictureBox-Eigenschaften, die ich noch nie benutzt hab. Folglich wird es für mich unmöglich, den Code für ein Image ohne Hilfe umzuschreiben...

    Nofear23m schrieb:

    Das geht nur per Code. aber per Code kannst du es auch so positionieren wie unter XAML.
    Wenn du schreibst was dein problem ist dann können wir eine Lösung finden.

    Und wie mach ich das? Also ich suche nach dem Code-Pendant zu z.B. <Image Grid.Column="0" Grid.Row="1">

    Nofear23m schrieb:

    Du kannst doch keine nicht-WPF Controls deklarativ erstellen.

    OK das war irgendwie klar 8o Hätte ja sein können... :P

    Wenn du willst kann ich die Klasse auch gern mal posten...

    Edit: Kommando zurück, so viele unbekannte Eigenschaften sinds dann doch nicht. Beschränkt sich auf PictureBox.BackgroundImage... Also ich probiers gerne mal mit nem Image...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kafffee“ ()

    Da ich gerade nur am Handy Online bin kann ich dir keinen Code posten aber das Positionieren eines Control über Code in ein Grid ist kein Problem.

    Solltest du also mit dem Image nicht zurecht kommen dann kann ich was den Code betrofft ja gerne am Abend was Posten.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo

    Angenommen folgende Ausgangssituation:

    XML-Quellcode

    1. <Grid Name="myGrid">
    2. <Grid.ColumnDefinitions>
    3. <ColumnDefinition Width="281*"/>
    4. <ColumnDefinition Width="297*"/>
    5. <ColumnDefinition Width="214*"/>
    6. </Grid.ColumnDefinitions>
    7. <Grid.RowDefinitions>
    8. <RowDefinition Height="99*"/>
    9. <RowDefinition Height="89*"/>
    10. <RowDefinition Height="231*"/>
    11. </Grid.RowDefinitions>
    12. </Grid>


    Folgender Code:

    VB.NET-Quellcode

    1. Dim Host As New Windows.Forms.Integration.WindowsFormsHost()
    2. Host.Background = New SolidColorBrush(Colors.AliceBlue)
    3. Dim Wellenform As New PictureBox
    4. Host.Child = Wellenform
    5. myGrid.Children.Add(Host)
    6. Grid.SetColumn(Host, 0)
    7. Grid.SetRow(Host, 1)


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##