Не удается создать DataTemplate в коде программной части

Я пытаюсь создать DataTemplate в своем коде и наткнулся на этот ответ.

Поэтому я просто скопировал и отредактировал код, но он не работает с этим исключением:

Исключение первого шанса «System.Windows.Markup.XamlParseException» в System.Windows.ni.dll Неизвестная ошибка анализатора: сканер 2147500037. [Строка: 4 Позиция: 36]

Вот сгенерированный код XAML:

<DataTemplate
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:simplebackground="clr-namespace:Plugins.Backgrounds.SimpleBackground">
    <simplebackground:SimpleBackground/>
</DataTemplate>

и вот код XAML, который я сейчас использую на своей странице (этот работает):

<phone:PhoneApplicationPage
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:simpleBackground="clr-namespace:Namespace.Backgrounds.SimpleBackground"
    x:Class="Namespace.Backgrounds.SimpleBackground.SimpleBackground" mc:Ignorable="d"
    FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}" d:DesignHeight="480" d:DesignWidth="480">

    <phone:PhoneApplicationPage.Resources>
        <DataTemplate x:Key="DataTemplate">
            <simpleBackground:SimpleBackground />
        </DataTemplate>
    </phone:PhoneApplicationPage.Resources>
  .............
<phone:PhoneApplicationPage>

Чтобы сгенерировать XAML, я использую этот код С#:

public static DataTemplate Create(Type type)
{
    var templateString = "<DataTemplate\r\n" +
                         "xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n" +
                         "xmlns:" + type.Name.ToLowerInvariant() + "=\"clr-namespace:" + type.Namespace + "\">\r\n" +
                         "<" + type.Name.ToLowerInvariant() + ":" + type.Name + "/>\r\n" +
                         "</DataTemplate>";            
    return XamlReader.Load(templateString) as DataTemplate;
}

Что с этим не так? Сообщение об исключении не так уж полезно :(


person StepTNT    schedule 08.01.2014    source источник


Ответы (1)


templateString в Create содержит элемент, который XamlReader не может найти. Вам нужно будет добавить сборку, в которой находится элемент, в пространство имен:

public static DataTemplate Create(Type type)
{
    var templateString = 
        "<DataTemplate " +
            "xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" " +                                   
            "xmlns:" + type.Name.ToLowerInvariant() +
                 "=\"clr-namespace:" + type.Namespace +
                 ";assembly=" + type.Assembly.GetName().Name + "\">" +
        "<" + type.Name.ToLowerInvariant() + ":" + type.Name + "/>" +
        "</DataTemplate>";            
    return XamlReader.Load(templateString) as DataTemplate;
}
person venerik    schedule 09.01.2014
comment
Я попробую, но я создаю этот код в той же сборке, в которой у меня есть элемент, который я пытаюсь создать! - person StepTNT; 09.01.2014