加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

WPF Generic Windows

发布时间:2020-12-14 01:43:19 所属栏目:Windows 来源:网络整理
导读:我想制作一个适用于不同类型T的可重用 WPF窗口. 我有一个设计师和一个代码隐藏文件. 我可以这样做吗? /* Code behind file */public partial class MyWindowsT : Window{} 不幸的是,你想要的不太可能. 更新:在.NET 4.0之前(即最初编写此答案时),XAML suppo
我想制作一个适用于不同类型T的可重用 WPF窗口.
我有一个设计师和一个代码隐藏文件.

我可以这样做吗?

/*  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中使用代码隐藏定义普通的非泛型类,并简单地使用通用基类来重用代码.这样,您至少可以获得一些适当的仿制药安全性和重复使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读