Это не поддерживается в WPF 3.x из коробки (я думаю, что это может быть в 4.0, но я не уверен); но его легко настроить с помощью расширения разметки.
Сначала необходимо создать класс расширения разметки, который принимает параметр типа в качестве аргумента конструктора:
public class MyClassOf : MarkupExtension
{
private readonly Type _of;
public MyClassOf(Type of)
{
_of = of;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return typeof(MyClass<>).MakeGenericType(_of);
}
}
Теперь вы используете это расширение разметки вместо расширения x: Type:
<HierarchicalDataTemplate DataType="{local:MyClassOf {x:Type MyObject}}" />
Само собой разумеется, это может быть обобщено, чтобы позволить создание экземпляров произвольных универсальных типов; Я не показывал это, потому что это добавляет немного больше сложности.