用户控件的用途是什么?

问题描述 投票:0回答:5
wpf xaml user-controls
5个回答
17
投票

UserControl
的目的是将一组控件分组到一个可重用的组件中。它们不能被设计样式或模板化。

Custom Control
的目的是扩展现有控件,或创建全新的控件。这些,与
UserControl
can 不同,可以进行样式化和模板化。

我认为你把两者混淆了。

所以,您可能想知道,“我什么时候应该使用

UserControl
,什么时候应该使用
Custom Control
?”
,答案是视情况而定。

当您需要创建一组逻辑控件,这些控件以某种方式交互以创建几乎“复合”控件时,您应该使用

UserControl
。当您想要向现有控件添加功能时,应该使用
Custom Control
在您的示例中,最好的方法是使用

UserControl

,因为您的

StackPanel
是制作成一个可重用组件的一组
控件。
您可以在这里

这里了解更多信息。


3
投票
的目的是帮助您构建

可重用的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 是一个“块盒”容器。

2
投票
根据我对该术语的理解并使用您的示例作为基础,您可以看到

StackPanel

派生的一个受到 StackPanel 布局两个按钮(水平或垂直)的能力的限制。将来,如果此布局发生变化(也许是一个新要求?),您将需要创建一个新的面板派生类(或重写现有的派生类)并使用它,例如 DockPanel。这很糟糕。

UserControl

派生面板上,您所要做的就是将 StackPanel 更改为适合新要求的另一种面板类型。

这使得 UserControl 成为一个块框,恕我直言。

根据您的示例,如果您仅使用用户控件一次,那么它就没那么有用。 但在这种情况下,如果某个设计部分被使用了很多次,并且每次编写 xaml 代码或任何其他逻辑来创建相同的 UI 时,那么用户控件就会发挥作用。

1
投票

你能用例子解释一下吗,它比这个例子好多了?

-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.