Wpf 使用IXamlTypeResolver解析泛型类型

Wpf 使用IXamlTypeResolver解析泛型类型,wpf,generics,xaml,Wpf,Generics,Xaml,我已经编写了一个新的TypeExtension类,它取代了默认的System.Windows.Markup.TypeExtension来处理泛型类型。它允许Xaml以多种不同的方式处理泛型类型,如: <DataTemplate DataType="{ck:Type [here a generic type name]}"> 这就是它的工作原理: 我编写了TypeExtension类,它继承了MarkupExtension(示例中是ck:Type) 我会重写ProvideValu

我已经编写了一个新的TypeExtension类,它取代了默认的System.Windows.Markup.TypeExtension来处理泛型类型。它允许Xaml以多种不同的方式处理泛型类型,如:

<DataTemplate DataType="{ck:Type [here a generic type name]}">

这就是它的工作原理:

  • 我编写了TypeExtension类,它继承了MarkupExtension(示例中是ck:Type)
  • 我会重写ProvideValue方法来调用IXamlTypeResolver上的Resolve

    IXamlTypeResolver服务=p.GetService(true)

    _type=service.Resolve(_typeName)

  • 因此,在.NET3.5中,我可以解析像“local:IConfigItemProperty`1”这样的类型。但是现在在.NET 4(使用WPF 4)中,resolve方法引发了一个异常:

    字符串“local:iconfitemproperty1”中意外出现字符“
    ”。XAML类型名称无效


    你认为.NET4.0不再支持“`”吗

    虽然这篇文章有点陈旧,但我为任何其他寻求解决方案的开发人员提供了答案。 从4.0开始,它们似乎改变了读者处理泛型的方式。IXamlTypeResolver服务缺乏对“`”的支持,这似乎是一个缺陷,而回归根本没有文档记录。 如果要使用泛型,可能需要使用x:TypeArguments进行切换,这是泛型的参数列表

    C#

    公共类图形库:IGraph
    {
    ...
    }
    
    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>  
    
    
    
    <?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>