C# &引用;前缀';x';不映射到命名空间";
我想在运行时使用C# &引用;前缀';x';不映射到命名空间";,c#,wpf,xaml,.net-4.0,C#,Wpf,Xaml,.net 4.0,我想在运行时使用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
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>
有趣的是,如果我将x:Key=“ValidationResponseTemplate”
添加到它解析的数据模板中,没有任何异常。但是,我不能保持这种方式,因为我不能通过在程序自己的.xaml
中的键指定DataTemplate(在运行时获取模板之前,它不会知道该模板)
x
名称空间是在程序自己的.xaml
和我试图解析的XML片段中定义的
总体目标:能够提供新的数据模板,既可以在运行时更改显示的外观,也可以在编译时显示客户端不知道的XML数据。找到了解决方法:与其让
XamlReader
解析字符串,不如给它一个XmlReader
。其中定义了DataTemplate
的XML片段是一个更大的XML文档的一部分,该文档的所有名称空间都在其根中定义。这已经被读入XDocument
,我从中抓取了XElement
,其中定义了ResourceDictionary
。新代码是MainWindow.xaml.cs
的一部分,如下所示:
ResourceDictionary dictionary = XamlReader.Load(myXElement.CreateReader()) as ResourceDictionary;
this.Resources.MergedDictionaries.Add(dictionary);
这引发了另一个异常,无法解析(http://myschemas/MyProfile)绑定
。事实证明,您需要限定所有内容的名称空间,包括{Binding…}
引用。因此,XML片段必须修改为:
<xm:TextBox Text="{xm:Binding Path=MessageID}"/>
现在XamlParser知道,Binding
是http://schemas.microsoft.com...“名称空间
<xm:TextBox Text="{xm:Binding Path=MessageID}"/>