WPF:包含控件与继承控件的自定义UserControl

WPF:包含控件与继承控件的自定义UserControl,wpf,inheritance,user-controls,Wpf,Inheritance,User Controls,我正在创建一个用户控件,它是一个专门的列表框/视图(类型不相关)。现在,我面临着要么将类型保留为UserControl,要么继承List控件的选项 1) 如果我把它作为一个UserControl保存,我在它里面有一个List控件,然后我必须为ItemsSource创建一个DP等等 2) 让它继承列表控件,从而自动公开ItemsSource属性 无论哪种方式都是可以接受的,或者它将成为某种代码恐惧。什么是预期的 是否有我不知道的选项3?恐怕没有唯一正确的答案。相对的优点是: #1在用户控件中托管列

我正在创建一个用户控件,它是一个专门的列表框/视图(类型不相关)。现在,我面临着要么将类型保留为UserControl,要么继承List控件的选项

1) 如果我把它作为一个UserControl保存,我在它里面有一个List控件,然后我必须为ItemsSource创建一个DP等等

2) 让它继承列表控件,从而自动公开ItemsSource属性

无论哪种方式都是可以接受的,或者它将成为某种代码恐惧。什么是预期的


是否有我不知道的选项3?

恐怕没有唯一正确的答案。相对的优点是:

#1在
用户控件中托管
列表

专业人士

  • 设计此控件更容易,即VisualStudio非常好地支持用户控件
  • 您可以限制正在“扩展”的控件的接口,例如,如果您想抑制
    列表视图的某些功能,只需不公开它即可
缺点

  • 您必须通过创建自己的
    itemsource
    ItemTemplate
    属性等手动公开ListView的功能。。。但是,如果愿意,可以将
    列表视图
    作为UserControl的属性公开
#2继承自
ListView

专业人士

  • 如果要替换现有的
    ListView
    实例,则立即替换插件
  • 您不必镜像
    列表视图的属性
缺点

  • 如果要添加其他控件,则必须创建新模板。这可能很复杂
  • 您无法轻松抑制
    列表视图的功能

所以,这真的取决于你想要实现什么。就我个人而言,如果您想对API进行重大更改,例如为一个非常特定的目的专门化ListView,我会选择(1)。如果您要创建一个高度通用的扩展,我会选择(2)。

谢谢。至少我知道这两种方法都是有效的。