Вы хотите сказать, что хотите найти ресурс DataTemplate, имя которого задается атрибутом XmlNode?Для этого вы можете привести item
к XmlElement, чтобы найти нужное значение, а затем вызвать TryFindResource для поиска ресурса:
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var fe = container as FrameworkElement;
var element = item as XmlElement;
if (fe != null && element != null)
{
var templateName = element.GetAttribute("TemplateName");
if (templateName != null)
{
return fe.TryFindResource(templateName) as DataTemplate;
}
}
return null;
}
Вы также можете сделать что-тоаналогично полностью в XAML, определяя стиль для ContentControl, который использует DataTriggers для установки ContentTemplate:
<Style x:Key="DynamicTemplateStyle" TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding XPath=@TemplateName}" Value="FirstTemplate">
<Setter Property="ContentTemplate" Value="{StaticResource FirstTemplate}"/>
</DataTrigger>
<DataTrigger Binding="{Binding XPath=@TemplateName}" Value="SecondTemplate">
<Setter Property="ContentTemplate" Value="{StaticResource SecondTemplate}"/>
</DataTrigger>
<!-- etc. -->
</Style.Triggers>
</Style>