Am Anfang der XAML-Compiler wurde geschrieben, um die Erstellung von "Bäumen" von. NET-Objekten zu ermöglichen, gab es 101 Projekte innerhalb von Microsoft, die XAML verwendet. Der XAML-Compiler weiß nichts über WPF.
Die "Name" -Eigenschaft wird von WPF definiert und ist nicht durch den XAML-Compiler bekannt. WPF ordnet die Namenseigenschaft zu der "Name TAG" zu, die von dem XAML-Compiler unterstützt wird. Das "x" in "x: name" sagt Verwendung "Name" wie durch das XAML XML-Schema definiert, "Name" sagt, eine Eigenschaft namens "name" für das angegebene Objekt zu finden. Weitere Details finden Sie unter In WPF, what are the differences between the x:Name and Name attributes?.
Der XAML-Compiler ist sehr eingeschränkt, was es mit einem Benutzersteuerelement tun kann, ohne die Assembly laden zu müssen, die das Benutzersteuerelement definiert. Da der XAML kompiliert werden muss, bevor die Assembly geladen werden kann, kann der XAML-Compiler die Assembly eindeutig nicht für ein Steuerelement laden, das in derselben Assembly implementiert ist. Daher weiß der XAML-Compiler nicht einmal, dass das Element ein Benutzersteuerelement ist.
Properties that are defined on a user control (or its parent class) can therefore not be accessed. “Name” is a property that is defined in the parent (or super-parent) of a custom control.
Der XAML-Compiler konnte nur sagen: "Name ist nicht als Eigenschaft definiert"; Wenn ja, denken Sie darüber nach, wie viele Leute eine einfache benutzerdefinierte Steuerung nicht funktionieren lassen können! Daher hat der XAML-Compiler einen Sonderfall, der eine nützlichere Fehlermeldung gibt, indem er "rät", was der Code bedeutet. Seine Vermutung ist meistens richtig.
Alles außer der einfachsten Benutzersteuerung muss in einer eigenen Baugruppe sein, aber Benutzer einfache Kontrolle sind so üblich, dass ein spezieller Fall für sie als lohnend erachtet wurde.
'Eigenschaften, die für ein Benutzersteuerelement (oder seine Elternklasse) definiert sind, können daher nicht aufgerufen werden.' - Das macht keinen Sinn für mich. Das Setzen anderer Eigenschaften, die in der Basisklasse definiert sind, funktioniert ' ', daher verstehe ich nicht, warum der Compiler den Wert der WPF-Eigenschaft 'Name' nicht auf die gleiche Weise setzen kann –
nevermind