Warum kann ich nicht verwenden das Name-Attribut auf UserControl in der gleichen assembly?
Habe ich ein WPF - UserControl
und versuchte, es zu benutzen, habe ich die folgende compiler-Fehlermeldung:
Weil 'UserControl1' implementiert ist, in der gleichen assembly, müssen Sie das x:Name-Attribut statt des Name-Attributs.
Die Botschaft ist klar, was zu tun ist, um es zu beheben, aber was ist seine Ursache? Warum kann ich nicht Name
hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
x:Name ist einfach eine explizitere Art zu sagen: "Das name-Attribut in diesem spezifischen XML-namespace". Die Tatsache, dass WPF kann nicht kompilieren, ohne angesichts dieser Hinweis, weil es in der gleichen assembly nur eine Einschränkung, wie Sie schrieb den parser.
Wenn Sie sich Fragen, warum es so ist, weiß ich nicht sicher, weil ich habe es nicht geschrieben. Es hat wahrscheinlich etwas mit der Sache zu tun brauchen, um in der Lage zu beheben, das Name-Attribut (read: Dependency Property), um etwas konkretes VOR dem erstellen Ihrer UserControl1, in anderen Worten, eine catch-22.
Beginn der XAML-compiler geschrieben wurde, ermöglichen die Schaffung von "Bäumen" aus .net-Objekte, es wurden 101 Projekte innerhalb von Microsoft, die XAML verwendet. Der XAML-compiler weiß nichts über die WPF.
Den "Name" - Eigenschaft definiert wird, die von WPF, und ist nicht bekannt, die über die vom XAML-compiler. WPF ordnet die Eigenschaft name auf die gleiche wie das "Name-TAG", der unterstützt wird vom XAML-compiler. Das "x" in "x:name" sagt, verwendest du "name", wie definiert durch die XAML-xml-schema, "Name" sagt, finden Sie die Eigenschaft "name" auf das angegebene Objekt. Sehen In WPF, was sind die Unterschiede zwischen x:Name und Name-Attribute? für mehr details.
Den XAML-compiler ist sehr beschränkt in dem, was Sie tun können, mit einem user control die zimmerreserviereung, ohne das laden der assembly definiert, dass der Benutzer die Kontrolle. Als die XAML kompiliert werden muss, bevor die assembly geladen werden kann, wird der xaml-compiler klar kann nicht laden Sie die Baugruppe für eine Steuerung implementiert in derselben assembly. Daher die XAML-compiler gar nicht wissen, das Element ist ein user control.
Den XAML-compiler könnte einfach sagen "der Name ist nicht definiert als eine Eigenschaft"; wenn es Tat, denken Sie, wie viele Menschen nicht bekommen, ein einfaches benutzerdefiniertes Steuerelement arbeiten! Daher die XAML-compiler hat ein Sonderfall, gibt eine sinnvolle Fehlermeldung, indem Sie "raten", was der code bedeutet. Seine Schätze sind meist korrekt.
Alles, abgesehen von den meisten einfachen user-Kontrolle muss in seiner eigenen Versammlung, jedoch Benutzer die einfache Steuerung sind so verbreitet, dass ein besonderer Fall war, als für Sie lohnt.
<local:UserControl1 Margin="3" />
, so verstehe ich nicht, warum der compiler nicht festlegen können, Wert derName
WPF-Eigenschaft in der gleichen Weise