UserControl
的目的是将一组控件分组到一个可重用的组件中。它们不能被设计样式或模板化。
Custom Control
的目的是扩展现有控件,或创建全新的控件。这些,与 UserControl
can 不同,可以进行样式化和模板化。
我认为你把两者混淆了。
所以,您可能想知道,“我什么时候应该使用
UserControl
,什么时候应该使用 Custom Control
?”,答案是视情况而定。
当您需要创建一组逻辑控件,这些控件以某种方式交互以创建几乎“复合”控件时,您应该使用
UserControl
。当您想要向现有控件添加功能时,应该使用Custom Control
。
在您的示例中,最好的方法是使用 UserControl
,因为您的
StackPanel
是制作成一个可重用组件的一组控件。您可以在这里和
这里了解更多信息。
可重用的UI组件
,这些组件可以像内置控件一样添加到您的工具箱中,从零开始。 这里的前缀“User”有点意思是“不是来自 WPF 团队”。 WPF 不提供任何派生自
UserControl
的类。
UserControls 的一个非常重要的方面是您可以使用 XAML 设计它们(因此它们可以是复合的),并将代码 + XAML 打包在一起,可能在一个“库”程序集中,您可以在没有源的情况下发布该程序集。现在,你的例子非常贫乏(无意冒犯:-),它们没有做任何有趣的事情,以至于我很想让它们真正可重用。大多数时候,在意识到您多次重复相同的 XAML 模式(可能有一些变化)之后,您将根据使用情况(或经验)构建 UserControl。
例如在这个开源项目(Github for Visual Studio)中:
https://github.com/github/VisualStudio/tree/master/src/GitHub.UI/Controls
,你会看到他们编写了一些自定义的控件,如 EmojiImage(派生自 Image,不需要 XAML),以及一个 UserControl:HorizontalShadowDivider。为什么?因为 HorizontalShadowDivider 具有与其关联的 XAML,并且(可能)在多个地方使用。我在一本书中读到过(抱歉忘记了书名...),UserControl 是一个“块盒”容器。StackPanel
在
UserControl
派生面板上,您所要做的就是将 StackPanel 更改为适合新要求的另一种面板类型。
这使得 UserControl 成为一个块框,恕我直言。
根据您的示例,如果您仅使用用户控件一次,那么它就没那么有用。 但在这种情况下,如果某个设计部分被使用了很多次,并且每次编写 xaml 代码或任何其他逻辑来创建相同的 UI 时,那么用户控件就会发挥作用。
你能用例子解释一下吗,它比这个例子好多了?