用户控件与自定义控件库的区别

19

我正在使用C# 2008在WPF中创建一个日期/时间用户控件。这是我的第一个用户控件。我还在使用Matthew MacDonald的书,《Pro WPF in C# 2008》。在那本书中,他强烈建议使用WPF自定义控件库项目模板来创建用户控件;所以我遵循了他的建议。我已经完成了应该放入代码后台文件中的代码编写。现在我准备编写XAML。

唯一的问题是,我刚刚发现没有对应的.xaml文件?所以,我不明白为什么在编写用户控件时使用WPF自定义控件库项目更好或更受欢迎?

2个回答

30

一个用户控件和一个自定义控件解决两个不同的问题。

UserControls旨在组合多个WPF控件,以构建由其他控件组成的功能集。这经常用于组合窗口或屏幕的一部分,以通过允许您将多个功能块组合成一个“控件”来组织开发。例如,如果您想要制作一个用于编辑用户的控件,提供名字、年龄等文本框,并可将其拖放到窗口中并绑定到一个用户实例进行编辑。(在这种情况下,您正在使用标准控件,例如TextBox,将“组合”一个更复杂的目的的控件。)

然而,CustomControl是指一个新的单一控件。这通常是内置控件的替代品(无法通过模板重新制作)。我发现在WPF中,需要CustomControls的情况实际上非常少,因为WPF模板选项和附加属性使您可以完全学习它们之后使用标准控件完成几乎所有任务。


谢谢您的解释。那么我认为我需要做的是使用用户控件项目而不是自定义控件库项目。 - Rod
5
这并没有回答问题。问题是自定义控件和用户控件之间的区别是什么。我可以根据这个答案推断出哪个应该使用,但它仍然没有告诉我这两个项目模板有何不同。 - Joel McBeth
从技术上讲,我同意你的看法@JoelMcBeth,但这仍然是一篇非常有用的好文章。我试图给出一个更完整的答案(https://dev59.com/T3RA5IYBdhLWcg3w1BqW#70308458)来回答同样的问题。当然,我也给了Reed功劳。 - cdiggins

1

我还想补充一点,如果你打算从控件继承,使用用户控件会使事情变得更加复杂。例如,如果创建一个基础用户控件,在Xaml中定义了布局,WPF框架将不允许你继承此控件并使用Xaml为子类定义布局。在dotnet 3.5中,Xaml控件无法继承自另一个Xaml控件。


1
你是正确的。这就是为什么在使用WPF时,必须优先选择组合而不是继承的原因。 - Luis Filipe
我不确定为什么每个人都在重复这个。您可以将用户控件(或任何其他控件)指定为XAML文件的根元素;结果类将继承自用户控件。子类的XAML中发生的情况取决于根基控件的内容属性。 - Zev Spitz

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