Laden...

Ableiten von UserControl

Erstellt von rijndael vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.007 Views
R
rijndael Themenstarter:in
4 Beiträge seit 2007
vor 16 Jahren
Ableiten von UserControl

Hallo zusammen,
ich benutzte VS2008 Beta 2.
ich habe in WPF ein UserControl erstellt und möchte von diesem UserControl ein Weiteres ableiten:


public partial class MyUserControl: UserControl{
...
}

public partial class MyExtUserControl: MyUserControl{
...
}

Beim ersten Compiler-Durchlauf, ging das auch ohne Probleme, beim zweiten Kompilieren, ändert VS2008 den unter dem Control "MyExtUserControl" liegenden Code ab und es kommt zu Fehlern, da ein "Teil" der Klasse weiterhin von "MyUserControl", der andere Teil dagegen von UserControl abgeleitet ist.

Meine Frage ist: Ist es überhaupt vorgesehen, so etwas zu tun (mit Windows-Forms habe ich es schon gemacht, da gehts) oder sollte man so etwas anders machen? Könnte es sich um einen Fehler im VS2008 handeln (dann wäre die Frage sicherlich in einem anderen Forum angebracht)

thx
rijn

F
23 Beiträge seit 2007
vor 16 Jahren

Hi rijndael,

das ist durchaus vorgesehen und funktioniert auch. Wie sieht denn Dein XAML aus?
Evtl. solltest Du dort statt UserControl MyUserControl als root benutzen:

<local:MyUserControl ...

</local:MyUserControl>

Florian

www.planet-xaml.net

6.862 Beiträge seit 2003
vor 16 Jahren

Hallo,

bitte beachte [Hinweis] Wie poste ich richtig? Punkt 6 und vor allem Punkt 5.

Man kann in .Net nicht teilweise ableiten.

...da ein "Teil" der Klasse weiterhin von "MyUserControl", der andere Teil dagegen von UserControl abgeleitet ist... sowas ist daher unmöglich. Wenn du sowas versuchen würdest, würde natürlich ne Fehlermeldung kommen.

Deshalb der Hinweis oben auf den Punkt 5 🙂

Generell verwendet man in WPF viel weniger Vererbung als unter Windows Forms.
Benutzerdefiniertes Aussehen, Animationen, neue Steuerelemente als Childs usw. waren unter Windows Forms nen Grund abzuleiten, unter WPF nicht - da gibts so viele Punkte wo man bestehende Controls seinen Wünschen anpassen kann ohne ableiten zu müssen. Nur wenn wirklich extra Funktionalität, welches sich nicht igendwie anders dem Control hinzufügen lässt, dazukommt, muss man ableiten.

Kann mir aber schon vorstellen was du versucht hast:
Du hast dein MyUserControl erstmal ganz normal erstellt und dann MyExtUserControl auch als UserControl und hast dann einfach die BaseClass von UserControl zu MyUserControl geändert? Falls ja, geht das so nicht, da der Designer mit 3 Dateien pro UserControl arbeitet, die UserControlName.xaml, die UserControlName.xaml.cs und als drittes wird noch die UserControlName.g.cs generiert die die Funktion InitializeComponent definiert und dort letztendlich beim Erstellen des UserControls das dazugehörige XAML lädt. An dieser generierten Datei kannst du nichts ändern und denke dort liegt dein Problem.

@fkruesch
Das geht nur wenn das MyUserControl nicht in XAML definiert ist - da in XAML definierte Elemente nicht als Root verwendet werden können.

Baka wa shinanakya naoranai.

Mein XING Profil.

R
rijndael Themenstarter:in
4 Beiträge seit 2007
vor 16 Jahren

Hallo talla,
genau das, was du beschreibst, ist das Problem. Ich habs mittlerweile so gelöst, dass ich mein Control so wie ich es brauche zu Laufzeit bzw. über das Setzten von Properties im Designer zusammenbaue. Das funktioniert ganz gut und ist weniger Chaos als ich vermutet habe. Es ist allerdings tatsächlich so, dass das Control, dass ich ableiten wollte mehr Funktionalität haben sollte. Ich denke hier ist mit WPF ein gewisses Umdenken ggü. Window-Forms gefragt.

rijn

6.862 Beiträge seit 2003
vor 16 Jahren

Naja, Funktionalität ist auch nen großer Begriff - was sollt das bei dir denn im speziellen sein? Normal vererbt man ja höchstens einmal und implementiert das was man brauch dann halt noch dazu.

Baka wa shinanakya naoranai.

Mein XING Profil.