Hallo
Wie funktioniert Vererbung eigener UserControls in WPF?
Bei der Code-Behind-Datei funktioniert ja alles wie gehabt mit z.B. "Public Class uc2 Inherits uc1".
Aber wie kriegt man es hin, das XAML zu vererben. Man findet im ganzen Internet so wenig darüber, als wenn es überhaupt nicht möglich wäre.
Wäre schön, wenn jemand darüber Bescheid wüsste und ggfls. den Header des XAML postet, wie eine Vererbung auszusehen hat.
Hallo Martin123,
sowas gab es hier schon mal: WPF - Ableiten eines UserControls [gelöst]
Du musst aber aufpassen fallst du ein Container-Control ableitest, weil dann kann man dem Containercontrol keine Controls mit Namen hinzufügen.
D.h. Wenn du z.B. ein Grid ableitest, dann kannst du in diesem grid kein Control hinzufügen das mit x:Name einen Namen hat.
Gruss
Michael
Hallo Martin123,
sowas gab es hier schon mal:
>
Du musst aber aufpassen fallst du ein Container-Control ableitest, weil dann kann man dem Containercontrol keine Controls mit Namen hinzufügen.
D.h. Wenn du z.B. ein Grid ableitest, dann kannst du in diesem grid kein Control hinzufügen das mit x:Name einen Namen hat.Gruss
Michael
Ich hab jetzt alle Varianten, die im Link vorkommen, ausprobiert. Er gibt mir immer einen Fehler aus. z.B. das Tag <Controlname> ist im Namespace .... nicht vorhanden.
Könntest du mir noch etwas weiter helfen?
Hallo Martin123,
es ist so schwer zu sagen wo der Fehler liegt.
Könntest du einen Teil deines Codes posten?
Der Fehler könnte daran liegen, dass du in der Xaml und Cs Datei unterschiedliche Namespaces angegeben hast.
Gruss
Michael
Hallo Martin123,
sowas gab es hier schon mal:
>>
Du musst aber aufpassen fallst du ein Container-Control ableitest, weil dann kann man dem Containercontrol keine Controls mit Namen hinzufügen.
D.h. Wenn du z.B. ein Grid ableitest, dann kannst du in diesem grid kein Control hinzufügen das mit x:Name einen Namen hat.Gruss
MichaelIch hab jetzt alle Varianten, die im Link vorkommen, ausprobiert. Er gibt mir immer einen Fehler aus. z.B. das Tag <Controlname> ist im Namespace .... nicht vorhanden.
Könntest du mir noch etwas weiter helfen?
Eventuell der typische Einsteigerfehler? Namespace nicht mit angegeben?
<window [...]
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:Tools.Klassen.Converter"
xmlns:k="clr-namespace:Komponenten;assembly=Komponenten"
</window>
Neben den Standartangaben werden hier noch meine Namespace´s Tools.Klassen.Converter instanziert, sowie aus einen anderen Projekt der Namespace Komponenten aus dem Assembly Komponenten.
Nun kann ich über c:MeinConverter auf die Konverter zu greifen und über k:TollesTool auf meine Kompenten. eine Schreibweise MeinConverter bzw TollesTool würde hier nicht funktionieren. Statt einen einzelnen Buchstaben kannst du auch zusammenhängendes Wort verwenden.
Wenn dir IntelliSence nicht die Möglichkeit gibt, die Komponente aus zu wählen. Dann hast du sie entweder den Namespace nicht mit angegeben oder gar keinen Verweis im Projekt (wenn du auf ein anderes Projekt verweisen mußt).
Und achte darauf das du den richtigen Namespace instanzierst 😉.
Gruß dat Tala
Also ich hab wie in der Lösung des letzten Beitrags vom Thread in WPF - Ableiten eines UserControls [gelöst] beschrieben erstmal eine Klasse angelegt (hab das jetzt mal in VB gemacht)
Namespace abc
Public Class MeinControl
Inherits UserControl
Public Sub MeineMethode()
End Sub
End Class
End Namespace
Danach ein Control hinzugefügt und folgendermaßen geändert
<src:MeinControl x:Class="abc.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="300" Height="300" xmlns:src="clr-namespace:abc">
<Grid>
</Grid>
</src:MeinControl>
Namespace abc
Partial Public Class UserControl1
Inherits MeinControl
Public Sub New()
InitializeComponent()
End Sub
End Class
End Namespace
Ich krieg da immer die Fehler "assembly wurde nicht gefunden" oder "control ist im namespace nicht bekannt". Was mache ich falsch?
Hallo Martin123,
hm, das ist sehr eigenartig, denn eigentlich müsste es so funktionieren.
Bist du sicher, dass es das MeinControl-Control auch gibt? Weil sonst könntest du von dem ja nicht ableiten 🙂
Gruss
Michael
<scr:MeinControl x:Class="abc.UserControl1"
xmlns:scr="clr-namespace:abc"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="300" Height="300"
>
<Grid>
</Grid>
</scr:MeinControl>
So sollte der XML Code aussehen
Gruß dat Tala