WPF => Winform

10/07/2008 - 20:54 von Lars Steinmetz | Report spam
Hallo Leute,

ich habe ein Problem im Zusammenhang mit dem Übergang zwischen WPF und
WinForm.

Folgendes Szenario:

Ich habe ein WPF-Control, welches ein nicht-rechteckiges Aussehen hat. Z.b.:

<UserControl x:Class="WindowsApplication1.WpfControl"
xmlns="http://schemas.microsoft.com/winfx/...tion"
xmlns:x="http://schemas.microsoft.com/winfx/...">
<Grid>
<Ellipse Fill="Yellow"/>
</Grid>
</UserControl>

Dieses kapsel ich in einem WinForm-UserControl mithilfe des ElementHosts:

public class WinFormControl
{
private System.Windows.Forms.Integration.ElementHost elementHost1;
private WpfControl wpfControl1;

public WinFormControl()
{
this.elementHost1 = new System.Windows.Forms.Integration.ElementHost();
this.wpfControl1 = new WindowsApplication1.WpfControl();
this.SuspendLayout();
//
// elementHost1
//
this.elementHost1.Dock = System.Windows.Forms.DockStyle.Fill;
this.elementHost1.Location = new System.Drawing.Point(0, 0);
this.elementHost1.Name = "elementHost1";
this.elementHost1.Size = new System.Drawing.Size(150, 150);
this.elementHost1.TabIndex = 0;
this.elementHost1.Text = "elementHost1";
this.elementHost1.Child = this.wpfControl1;
//
// WinFormControl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.elementHost1);
this.Name = "WinFormControl";
this.ResumeLayout(false);
}
}


Soweit, so gut.

Dieses WinFormControl verwende ich jetzt auf einem Windows.Forms Dialog.

Dabei zeigt sich folgende Merkwürdigkeit:

Alle Instanzen, die per Designer hinzugefügt werden, sehen einwandfrei
aus, Instanzen, die erst zur Laufzeit z.B. auf einen Button-Klick
erzeugt werden, haben unschöne schwarze Ecken! Da hilft auch kein
Invalidate und Co.

Nun zu den Fragen:

- Wie erklàrt sich dieses Unterschiedliche Verhalten?
- Wie kann mans hinbekommen, dass es auch auf Button-Klick "vernünftig"
aussieht?
- Wie bekommt man diese Ecken echt transparent hin, so dass dahinter
liegende Controls auch sichtbar bleiben?

In der Doku bin ich über die BackColorTransparent-Eigenschaft des
ElementHosts gespolpert, welches laut Doku ziemlich genau das machen
soll, was ich möchte. In meinen Versuchen blieb dieses Property aber
wirkungslos. Kann mich darüber mal bitte jemand aufklàren.


Vielen Dank im Voraus!

Gruß Lars
 

Lesen sie die antworten

#1 Frank Dzaebel
10/07/2008 - 22:27 | Warnen spam
Hallo Lars,

transparentes UserControl als ElementHost



Hier ein paar Ansàtze und Hintergründe für das bekannte Phànomen:

[MSDN Windows Presentation Foundation (WPF) ElementHost's black border
problem]
http://74.125.39.104/search?q=cache:cjfD9-6EVFkJ:forums.msdn.microsoft.com/en/wpf/thread/215c8270-8d87-4ad6-99d6-c8a6630eaf05/+BackColorTransparent&hl=de&gl=de&strip=1

[Windows Forms/WPF Interop, quality, and random stuff : Gotchas For Working
With Windows Forms/WPF Interop]
http://blogs.msdn.com/scoberry/arch...35844.aspx

[MSDN Windows Presentation Foundation (WPF) How do I make ElementHost
transparent?]
http://74.125.39.104/search?q=cache:uCZFfQJKYBgJ:forums.msdn.microsoft.com/en/wpf/thread/1ab1d4de-19b5-4342-9c8f-1f82a13f0ca5/&hl=de&strip=1

(die Originale sind z.Z. zum Teil nicht erreichbar)


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen