Проблемы с XamlReader, генерирующим DataTemplate

Я пытаюсь реализовать код ниже в моем проекте WPF, чтобы генерировать DataTemplates "на лету" для DataGrid с динамическими столбцами. Я нашел код на StackOverflow здесь

public DataTemplate Create(Type type)
{
  return (DataTemplate)XamlReader.Load(
          @"<DataTemplate
            xmlns=""http://schemas.microsoft.com/client/2007"">
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
            </DataTemplate>"
   );
}

Однако в коде XamlReader.Load я получаю сообщение об ошибке "не может преобразовать из" string "в" System.Xaml.XamlReader ".

Я попытался обойти это, изменив код на:

return (DataTemplate)XamlReader.Load(XmlReader.Create(

но я получаю ошибки о передаче недопустимых символов в строке.

Кроме того, я не уверен, как передать TextBlock в этот код. Я представил себе, что просто создаю TextBlock и передам его как аргумент типа, но получаю ошибку "не могу преобразовать из" System.Windows.Controls.TextBlock "в" System.Type "

Любая помощь была оценена.

Ответ 1

public DataTemplate Create(Type type)
{
    StringReader stringReader = new StringReader(
    @"<DataTemplate 
        xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""> 
            <" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/> 
        </DataTemplate>");
    XmlReader xmlReader = XmlReader.Create(stringReader);
    return XamlReader.Load(xmlReader) as DataTemplate;
}

Назовите его так:

TextBlock textBlock = new TextBlock();
Create(textBlock.GetType());

Ответ 2

Я скопировал ваш код с обходным решением для XmlReader, и он отлично работал без каких-либо проблем. Попробуйте следующее:

 return (DataTemplate)XamlReader.Load(
                XmlReader.Create(
                    @"<DataTemplate  xmlns=""http://schemas.microsoft.com/client/2007""><" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
            </DataTemplate>"
             ));

Это должно работать.