Frage

Derzeit habe ich eine Winforms-app, die setzt auf Transparenz-Feld-Effekte.Dies ist jedoch erweist sich als ein absoluter Schmerz im preverial hinter sich!Winforms als Im lernen nicht deal mit Transparenz besonders gut.

Ich Frage mich, ob oder nicht, das würde einfacher sein, die Verwendung von WPF-Komponenten für die Transparenz bit-und winforms-für den rest (Hinweis: obwohl Id wie zu bewegen die gesamte app über WPF-das ist einfach nicht machbar!).Ich weiß fast nichts über WPF, daher der Grund, warum ich hier bin!Was war ich considereing war :

1) Host-WPF-Komponente innerhalb einer Winforms-Benutzersteuerelement z.B.Beispiel für WPF-Steuerelement:

<UserControl x:Class="WindowsFormsApplication1.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <Grid>
         <Rectangle Name="rectangle1" Stroke="White" Fill="Black" RadiusX="10" RadiusY="10" Opacity="0.7" />
        <Rectangle Margin="57,101,43,99" Name="dialog" Stroke="Gray" Fill="White" RadiusX="10" RadiusY="10" />
    </Grid>
</UserControl>

2) Host-eine Winforms-Benutzersteuerelement (Inhalte) innerhalb des weißen Rechtecks (dialog) der WPF-Steuerelement.3) lassen Sie den Inhalt (Winforms-Benutzersteuerelement) zum aufrufen von code auf das übergeordnete Element des WPF-Steuerelement.

Erste Dinge zuerst...

  • Ist dies eine vernünftige Sache zu tun, oder bin ich da auf dem Holzweg?
  • Kann das erreicht werden, in eine einfachere Mode?
  • Kann mir jemand helfen hier?(Beispielcode wäre dankbar angenommen!)
  • Endlich ...gibt es online-Ressourcen, die helfen können Sie mir a) zu lernen WPF und b) werden mehr selbst-ausreichend?
War es hilfreich?

Lösung 2

Hier ist die Lösung, die ich verwendet, um zu lösen die problem at Hand.Diese Lösung basiert auf der überlagerung Steuerelement zum Rendern seinen Eltern als bitmap-Bild.Dieser erhält dann gemalt, der hintergrund der überlagerung control.

public class OverlayingControl : UserControl
{
    /// <summary>
    /// Overrides the c# standard Paint Background to allow the custom background to be drawn 
    /// within the OnPaint function
    /// </summary>
    /// 
    /// <param name="e">Arguements used within this function</param>
    protected override void OnPaintBackground( PaintEventArgs e )
    {
        //Do Nothing 
    }

    protected override void OnPaint( PaintEventArgs e )
    {
        // Render the Parents image to a Bitmap. NB: bitmap dimensions and Parent Bounds can be changed to achieve the desitred effect
        Bitmap background = new Bitmap( Width, Height, PixelFormat.Format64bppArgb );
        Parent.DrawToBitmap( background, Parent.Bounds );

        // Paint background image             
        g.DrawImage( background, 0, 0, new RectangleF( Location, Size ), GraphicsUnit.Pixel );

        // Perform any alpha-blending here by drawing any desired overlay e.g.
        // g.FillRectangle( new SolidBrush( semiTransparentColor ), Bounds);
    }

}

Dies geschieht rein in die WinForms-domain, aber ich glaube, dass es möglich sein könnte, passieren diese Bitmap-Bild, um ein WPF-Steuerelement zu Rendern, wie erforderlich.Momentan gibt es keine Bestimmung für die Aktualisierung der Bitmap, wenn das übergeordnete Veränderungen, Jedoch, es sollte trivial sein, um erstellen Sie eine benutzerdefinierte Methode, die löscht die bitmap-und wieder zieht die Overlayng control.Nicht eine elegante Lösung, die ich realisieren...aber es scheint zu funktionieren gut genug.

Andere Tipps

Es ist sicherlich möglich, und ich glaube, Sie haben Recht, es wäre der einfachste Weg, um die Arbeit mit Transparenz.

Ich habe nicht versucht, es selbst, aber laut diesem Artikel auf CodeProject, es sollte Recht einfach sein.Sollten Sie die ElementHost-Steuerelement host WPF-Inhalte.

Hosting WPF in WinForms control ist ein unterstütztes Szenario, ein feature gebaut in die Rahmen.So sollte es keine Probleme dabei.Es ist auch eine WPF-Komponente für den Gang in die andere Richtung, hosting WinForms in WPF-Anwendung.

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