我有一个设计师和一个代码隐藏文件.
我可以这样做吗?
/* Code behind file */ public partial class MyWindows<T> : Window {}
更新:在.NET 4.0之前(即最初编写此答案时),XAML support for consuming generic types was very limited;例如泛型只适用于根元素.在.NET 4.0中,解除了一些限制.
在.NET 4.0中,您可以构建完全专用的泛型类型.因此,虽然XAML本身仍然没有泛型类型的概念,但它可以引用泛型类型的特化. (类似地,XAML不能表达概念List<>但它可以表达概念List< int>).有关详细信息,请参阅MSDN page “Generics in XAML”.
您可以使用x:TypeArguments
Directive构造专用泛型类型的实例.例如,x绑定到XAML的命名空间,sys绑定到System命名空间,scg绑定到System.Collections.Generic,并且您自己的MyWindows命名空间绑定到我的then:
>< my:MyWindows x:TypeArguments =“x:String”>会构造一个MyWindows< string>实例.
>< scg:List x:TypeArguments =“sys:Tuple(sys:String,sys:Int32)”>将构造一个List< Tuple< string,int>>
因此,在XAML中使用泛型类型不再是问题!
唉,您想在XAML中定义泛型类型.那是不可能的.这里有两种解决方法.首先(并根据您对另一个问题的评论,我认为这是您想要的),您可以简单地将类型作为普通参数传递.如果这样做,您将失去泛型提供的所有编译时安全功能,但通常这些功能不相关.其次,您可以在XAML中使用代码隐藏定义普通的非泛型类,并简单地使用通用基类来重用代码.这样,您至少可以获得一些适当的仿制药安全性和重复使用.