当我从XElement
继承时,DataTemplate
使用元素名称为XElement
的{{1}}不适用于子类。有什么想法吗?
DataType
答案 0 :(得分:0)
我知道为什么它不起作用,但我不明白为什么它按照它的方式实现。用反射器查看方法“FindTemplateResourceInternal
”中的代码我找到了答案:
Type baseType = item.GetType();
if ((baseType.FullName == "System.Xml.Linq.XElement") &&
((obj2 = GetXLinqTagName(item, baseType)) != null))
{
baseType = null;
}
好的,我知道我班的全名不是System.Xml.Linq.XElement
。但是后来,一旦你进入“同时”:
while (obj2 != null)
{
object obj3 = null;
if (templateType == typeof(DataTemplate))
{
obj3 = new DataTemplateKey(obj2);
}
if (obj3 != null)
{
keys.Add(obj3);
}
if (exactMatch == -1)
{
exactMatch = keys.Count;
}
if (baseType != null)
{
baseType = baseType.BaseType;
//HERE baseType FullName is XElement
//Why don't check it again??
if (baseType == typeof(object))
{
baseType = null;
}
}
obj2 = baseType;
}
在此循环内,"baseType=baseType.BaseType"
之后,如果再次检查FullName
,现在它是XElement
...
但相反,它现在正在寻找DataTemplate
DataType={x:Type XElement}
...