Laden...

Vererbung eigener Controls in WPF

Erstellt von Martin123 vor 15 Jahren Letzter Beitrag vor 15 Jahren 10.801 Views
M
Martin123 Themenstarter:in
19 Beiträge seit 2008
vor 15 Jahren
Vererbung eigener Controls in WPF

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.

3.430 Beiträge seit 2007
vor 15 Jahren

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

M
Martin123 Themenstarter:in
19 Beiträge seit 2008
vor 15 Jahren

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?

3.430 Beiträge seit 2007
vor 15 Jahren

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

582 Beiträge seit 2008
vor 15 Jahren

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?

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

M
Martin123 Themenstarter:in
19 Beiträge seit 2008
vor 15 Jahren

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?

3.430 Beiträge seit 2007
vor 15 Jahren

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

582 Beiträge seit 2008
vor 15 Jahren

<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