Quiero cargar un DataTemplate en tiempo de ejecución usando XamlReader
, pero arroja la excepción "Prefijo 'x' no se asigna a un espacio de nombres.""Prefijo 'x' no se asigna a un espacio de nombres"
Esta es la cadena XML que estoy pasando a XamlReader
:
<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>
Este es el código que lo está leyendo:
ResourceDictionary dictionary = XamlReader.Parse(myXamlString) as ResourceDictionary;
Aquí está la parte divertida, si añado x:Key="ValidationResponseTemplate"
a la DataTemplate analiza sin excepciones. No puedo mantenerlo así, sin embargo, porque no puedo especificar el DataTemplate por clave en el propio .xaml
del programa (no conocerá la plantilla hasta que se obtenga en el tiempo de ejecución).
El espacio de nombre x
se define tanto en el propio .xaml
del programa como en el fragmento de XML que estoy tratando de analizar.
Objetivo general: poder proporcionar nuevas plantillas de datos para cambiar la apariencia de la pantalla en tiempo de ejecución y para mostrar datos XML que el cliente no conocía en tiempo de compilación.