Я пытаюсь использовать DataTemplateSelector
с определенным сторонним элементом управления сеткой WPF, и у меня возникают проблемы с определением, являются ли проблемы, которые возникают у меня, ошибкой в элементе управления или моим собственным непониманиемсоглашения шаблонов данных WPF.
Я понимаю, что обычный вариант использования DataTemplate
состоит в том, чтобы объявить его где-нибудь в XAML (будь то в качестве ресурса или явно там, где он используется), но мой конкретный проект будетбыло бы очень полезно, если бы я мог создать шаблон в коде (в частности, на C #), а не в XAML.Проблема, с которой я сталкиваюсь, заключается в том, что мой созданный код DataTemplate
использует FrameworkElementFactory
в качестве шаблона VisualTree
, тогда как созданный XAML шаблон использует объект TemplateContent
в качестве значения Template
шаблона.Как я могу сказать прямо сейчас, рассматриваемый элемент управления сеткой работает с шаблонами, использующими Template
, но, похоже, не очень хорошо работает с шаблонами, использующими VisualTree
.
Для сравнения, воткак один из шаблонов выглядит в XAML как часть моего селектора:
<MySelectorType>
<MySelectorType.BooleanTemplate>
<DataTemplate>
<EditorControl Name="Reserved_Name" />
</DataTemplate>
</MySelectorType.BooleanTemplate>
</MySelectorType>
А вот как я пытаюсь создать эквивалентный шаблон в коде:
var template = new DataTemplate()
{
VisualTree = new FrameworkElementFactory(typeof(EditorControl))
{
Name = "Reserved_Name"
}
};
I 'Мы также попробовали это так:
var template = new DataTemplate()
{
VisualTree = new FrameworkElementFactory(typeof(EditorControl))
};
template.VisualTree.SetValue(EditorControl.NameProperty, "Reserved_Name");
Что казалось более аналогичным тому, что будет делать шаблон XAML, но казалось, что оно не работает вообще (редактор не читал и не устанавливалзначение, где по крайней мере первая версия будет читать его).
Возможно ли, чтобы мой шаблон в коде использовал свойство Template
вместо VisualTree
?Согласно документации , для этого типа нет общедоступного API, и путь его создания сложен, но было ли это сделано?Единственный пример , который я обнаружил, использует жестко закодированный XAML в коде, что мне не подходит.