何时应该在WPF中提取UserControl

5

在我们的工作中,有一些人想要创建用户控件,将常用的控件组合在一起,比如标签和文本框,或者标签和图像控件。就像这样:

<StackPanel Orientation="Horizontal">
    <Image Source="/Someimage/Somewhere.gif"/>
    <Label>Some text, hyperlink, or other content</Label>
</StackPanel>

并像这样使用它

<ImageLabel
    HeaderImageSource="/Someimage/Somewhere.gif"
>
    Some text, hyperlink, or other content
</ImageLabel>

这个问题是他们是否提供了足够的封装和抽象,以证明需要一个单独的用户控件?
2个回答

3
是的,如果它们在您的上下文中形成一个逻辑组件,我认为这足以创建一个单独的用户控件。在我正在处理的项目中,如果我们有类似的分组组件,我们会创建用户控件以便重用。
主要好处是,您可以控制组件的结构和样式。考虑一下您想要做出更改的情况。例如,在图像周围添加边框或为标签添加样式。您不想浏览代码以找到所有重复组件的出现位置。相反,您希望仅更新自定义组件中的这个位置。
另一个优点是,如果您想将组件绑定到同一个对象,则可以将您的ImageLabel绑定到该对象,而您的组件可以直接以干净、整洁的方式绑定到此对象中的属性。
注意:我假设您确实想重用此组件,并希望在整个应用程序中以相同的方式进行结构化和样式化。我不会仅仅为了使用一次就创建这么简单的用户控件。

是的,您可以使用样式来确保各个组件看起来相同 - 但是这样您需要记住为每个组件更新样式引用。如果您实际上希望它们在任何地方使用时看起来相同 - 就像一个逻辑组件一样,您应该将其制作为用户控件。例如,如果您更改了标签的样式,但忘记更新它,那么您将得到一个与其他组件不同的“组件”出现。我认为构建单独的组件更加清晰。但是,如果它们实际上在某种程度上是逻辑上绑定在一起的话,那就另当别论了。 - stiank81
该控件被提议作为一个通用解决方案,无论何时需要在标签中使用图像。 - np-hard

2

为三个控件创建一个UserControl似乎有点过度,我会考虑它是否节省了我的时间和精力而不是封装/抽象。


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