如何解决“前缀\'x\'不会映射到名称空间”
| 我想在运行时使用XamlReader
加载DataTemplate,但是它抛出异常\“前缀\'x \'不会映射到名称空间。\”
这是我要传递给XamlReader
的XML字符串:
<xm:ResourceDictionary
xmlns:xm=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"
xmlns:do=\"clr-namespace:MyLibrary.DataObjects;assembly=MyLibrary.DataObjects\"
xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">
<xm:DataTemplate DataType=\"{x:Type do:ValidationResponse}\">
<xm:StackPanel Orientation=\"Horizontal\">
<xm:Label>MessageID</xm:Label>
<xm:TextBox Text=\"{Binding Path=MessageID}\"/>
</xm:StackPanel>
</xm:DataTemplate>
</xm:ResourceDictionary>
这是正在读取的代码:
ResourceDictionary dictionary = XamlReader.Parse(myXamlString) as ResourceDictionary;
这是有趣的部分,如果我在解析的DataTemplate中添加“ 4”,则没有任何异常。但是,我不能保持这种方式,因为我无法通过程序自己的.xaml
(通过在运行时获取模板之前不了解模板)来指定DataTemplate。
程序本身的.xaml
和我要解析的XML片段中都定义了x
名称空间。
总体目标:能够提供新的DataTemplates来在运行时更改显示的外观,并显示客户端在编译时不知道的XML数据。
解决方法
找到了解决方法:与其让
XamlReader
解析一个字符串,不如给它一个XmlReader
更好地工作。在其中定义了“ 10”的XML片段是一个更大的XML文档的一部分,该文档的所有名称空间均在其根目录中定义。这已经被读成XDocument
,然后我抓起其中定义了ResourceDictionary
的XElement
。新代码是MainWindow.xaml.cs
的一部分,如下所示:
ResourceDictionary dictionary = XamlReader.Load(myXElement.CreateReader()) as ResourceDictionary;
this.Resources.MergedDictionaries.Add(dictionary);
这引发了一个不同的异常,即无法解析(http://myschemas/MyProfile)Binding
的类型。事实证明,您需要限定所有内容的名称空间,包括“ 17”引用。因此,必须将XML片段修改为:
<xm:TextBox Text=\"{xm:Binding Path=MessageID}\"/>
现在XamlParser知道Binding
是\“ http://schemas.microsoft.com ... \”命名空间中的类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。