WPF:包含控件与继承控件的自定义UserControl
我正在创建一个用户控件,它是一个专门的列表框/视图(类型不相关)。现在,我面临着要么将类型保留为UserControl,要么继承List控件的选项 1) 如果我把它作为一个UserControl保存,我在它里面有一个List控件,然后我必须为ItemsSource创建一个DP等等 2) 让它继承列表控件,从而自动公开ItemsSource属性 无论哪种方式都是可以接受的,或者它将成为某种代码恐惧。什么是预期的WPF:包含控件与继承控件的自定义UserControl,wpf,inheritance,user-controls,Wpf,Inheritance,User Controls,我正在创建一个用户控件,它是一个专门的列表框/视图(类型不相关)。现在,我面临着要么将类型保留为UserControl,要么继承List控件的选项 1) 如果我把它作为一个UserControl保存,我在它里面有一个List控件,然后我必须为ItemsSource创建一个DP等等 2) 让它继承列表控件,从而自动公开ItemsSource属性 无论哪种方式都是可以接受的,或者它将成为某种代码恐惧。什么是预期的 是否有我不知道的选项3?恐怕没有唯一正确的答案。相对的优点是: #1在用户控件中托管列
是否有我不知道的选项3?恐怕没有唯一正确的答案。相对的优点是: #1在
用户控件中托管列表
专业人士
- 设计此控件更容易,即VisualStudio非常好地支持用户控件
- 您可以限制正在“扩展”的控件的接口,例如,如果您想抑制
列表视图的某些功能,只需不公开它即可
缺点
- 您必须通过创建自己的
itemsource
、ItemTemplate
属性等手动公开ListView的功能。。。但是,如果愿意,可以将列表视图
作为UserControl的属性公开
#2继承自ListView
专业人士
- 如果要替换现有的
ListView
实例,则立即替换插件
- 您不必镜像
列表视图的属性
缺点
- 如果要添加其他控件,则必须创建新模板。这可能很复杂
- 您无法轻松抑制
列表视图的功能
所以,这真的取决于你想要实现什么。就我个人而言,如果您想对API进行重大更改,例如为一个非常特定的目的专门化ListView,我会选择(1)。如果您要创建一个高度通用的扩展,我会选择(2)。谢谢。至少我知道这两种方法都是有效的。