Проблемы с 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>"
));
Это должно работать.