Ich möchte ein DataTemplate zur Laufzeit mit XamlReader
laden, aber es wirft die Ausnahme "Prefix 'x' wird keinem Namespace zugeordnet."
Dies ist die XML-Zeichenfolge, die ich an XamlReader
:
Dies ist der Code, der es liest:
%Vor% Hier ist der lustige Teil, wenn ich x:Key="ValidationResponseTemplate"
zu der DataTemplate hinzufüge, die ohne irgendwelche Ausnahmen analysiert wird. Ich kann es jedoch nicht so behalten, weil ich das DataTemplate nicht per Schlüssel in der eigenen .xaml
angeben kann (es wird nichts über die Vorlage wissen, bis sie zur Laufzeit abgerufen wird).
Der Namespace x
ist sowohl im programmeigenen .xaml
als auch im Fragment von XML definiert, das ich analysieren möchte.
Gesamtziel: In der Lage sein, neue DataTemplates bereitzustellen, um das Aussehen der Anzeige zur Laufzeit zu ändern und XML-Daten anzuzeigen, die der Client zur Kompilierungszeit nicht kannte.
Es wurde ein Umweg gefunden: Anstatt XamlReader
eine Zeichenkette analysieren zu lassen, funktionierte es besser, wenn ich ihr XmlReader
gab. Das XML-Fragment mit der darin definierten DataTemplate
war Teil eines größeren XML-Dokuments, in dem alle Namespaces im Stammverzeichnis definiert waren. Dies wurde bereits in ein XDocument
gelesen, und von dem ich das XElement
mit dem darin definierten ResourceDictionary
genommen hätte. Der neue Code, Teil von MainWindow.xaml.cs
, sieht so aus:
Dies hat eine andere Ausnahme ausgelöst, bei der der Typ von (http://myschemas/MyProfile)Binding
nicht aufgelöst werden konnte. Es stellt sich heraus, dass Sie die Namespaces von alles , einschließlich der {Binding ...}
Referenzen, qualifizieren müssen. Daher musste das XML-Fragment wie folgt geändert werden:
Nun wusste XamlParser, dass Binding
ein Typ im Namensraum "http: //schemas.microsoft.com ..." war.