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

3
我正在创建一个用户控件,它是一个特殊的ListBox/View(类型不相关)。现在我面临两个选择:将类型保留为UserControl或继承List控件。
1)如果我将其保留为UserControl,则在其中有一个List控件,然后我必须为ItemsSource等创建DP。
2)让它继承List控件,因此它会自动公开ItemsSource属性。
这两种方式是否可接受,或者会变成一些代码恐怖。预期结果是什么。
也许有第三种选项我不知道吗?
1个回答

4
很遗憾,我没有一个单一的正确答案。它们各有优缺点:
#1 在UserControl中托管List
PROs - 设计控件更容易,即VisualStudio很好地支持UserControls。 - 您可以限制您正在扩展的控件的接口,例如,如果您想禁止某些ListView功能,则可以通过简单地不公开它来实现。
CONs - 您必须手动公开ListView的功能,例如创建自己的ItemsSource、ItemTemplate属性等。但是,如果您愿意,可以将ListView作为UserControl的属性公开。
#2 继承ListView
PROs - 如果要替换现有的ListView实例,则可以立即提供插件替换。 - 您不必镜像ListView的属性。
CONs - 如果要添加其他控件,则必须创建新模板。这可能会很复杂。 - 您无法轻松地禁止ListView的功能。
因此,它真的取决于您想要实现什么。个人而言,如果您想显着更改API(例如,将ListView专门用于非常特定的目的),则我会选择(1)。如果您要创建高度通用的扩展程序,则我会选择(2)。

谢谢。至少我知道两种方法都是有效的。 - Ingó Vals

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接