我编写了一个新的TypeExtension类,它替换了默认的System.Windows.Markup.TypeExtension来处理泛型类型。它允许Xaml以许多不同的方式使用泛型类型,例如:
<DataTemplate DataType="{ck:Type [here a generic type name]}">
这是它的工作原理:
我重写了ProvideValue方法,在IXamlTypeResolver上调用Resolve
IXamlTypeResolver service = p.GetService(true);
_type = service.Resolve(_typeName);
因此,在.NET 3.5中,我可以解析类似“local:IConfigItemProperty`1”的类型。但现在在.NET 4(使用WPF 4)中,resolve方法抛出异常:
字符'
' was unexpected in string 'local:IConfigItemProperty
1'。无效的XAML类型名称。
你认为.NET 4.0不再支持'''了吗?
答案 0 :(得分:1)
虽然帖子有点陈旧,但我还是为其他任何寻找解决方案的开发人员提供了答案。 从4.0开始,它们改变了Reader处理泛型的方式。 IXamlTypeResolver服务缺乏对“`”的支持似乎是一个错误,而回归根本没有记录。 如果你想使用泛型,你可能想用x:TypeArguments切换,列出泛型的参数。
<强> C#强>
public class GraphBase<N,L,P> : IGraph<N,L,P>
{
...
}
<强> XAML 强>
<?xml version="1.0" encoding="utf-8" ?>
<GraphBase
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns="clr-namespace:MyGeoLive.Topology;assembly=MyGeoLive.Topology"
xmlns:System="clr-namespace:System;assembly=mscorlib"
x:TypeArguments="System:String,System:String,System:String" >
</GraphBase>