在UWP应用程序中自引用generics类型约束和XAML

我目前正在开发一个UWP应用程序,其中我在PCL中使用自引用generics类型约束 。

这里描述了PCL的类。

首先,实现自引用generics类型约束的类(此类还实现new()约束)

 public abstract class A where T : A, new() { //... } 

然后,我有一个扩展Windows.UI.Xaml.Controls.Page类的基类:

 public abstract class MyPage : Page where T : A, new() { //... } 

我还有一个扩展Windows.UI.Xaml.Application类的基类:

 public abstract class MyApplication : Application where T : A, new() { //... } 

我的UWP课程以下列方式扩展了上述PCL的类…

首先,我有一个扩展A类的B类:

 public sealed class B : A { //... } 

然后,我有扩展MyApplication类的类App 。 csharp文件:

 public sealed partial class App : MyApplication { //... } 

和XAML文件:

  

然后,我有一个扩展类MyPageHomePage 。 csharp文件:

 public sealed partial class HomePage : MyPage { //... } 

和XAML文件:

  

当我尝试编译时,我有以下错误(消息是法语,我试图用英语翻译它们):

用于generics类型MyApp需要类型为1的参数(文件App.i.cs)

用于generics类型MyPage需要类型为1的参数(文件HomePage.i.cs)

名称MyApp在名称空间中不存在using:My.PCL (文件App.xaml)

名称MyPage在名称空间中不存在using:My.PCL (文件HomePage.xaml)

根据这些问题,我需要在AppHomePage类的XAML中指定genereic类型,所以这里是根据本文的新XAML文件:

  

  

但它不起作用。 我仍然有以前的错误…和新的错误:

My.PCL.MyApplication'1[T]上的GenericArguments [0], System.Object违反了类型T的约束(文件App.xaml)

My.PCL.MyPage'1[T]上的GenericArguments [0], System.Object违反了类型T的约束(文件HomePage.xaml)

你知道如何解决这个问题吗?

预先感谢您的帮助 !

鉴于此答案(对于Windows 8)和您的结果,我认为我们可以安全地假设Windows 10中仍不支持XAML中的通用参数。

作为解决方法,您可以在inheritance树中添加中间类以设置通用约束:

 public abstract class BaseApp : MyApplication { } 

然后让你的应用inheritance它:

 sealed partial class App : BaseApp 

并相应地更改您的XAML:

  

很脏,但不幸的是,你无能为力。