WPF中的用户控件与控件模板:使用哪个?

4

我最近在审查某人的代码时发现一个用户控件,其UI如下所示的截图。

enter image description here

这个控件在其代码后台文件中没有任何代码。我在考虑将此用户控件的所有xaml代码移动到控件模板中,并在需要时使用它。我想知道这是否是一个好的做法,我应该这样做吗?

一种方法是否比另一种方法有更好的性能和设计优势?


如果一个控件已经是用户控件,为什么你认为使用控件模板是必要的? - TalentTuner
获取XAML并将其制作成控件模板很好。我不知道性能会受到多少影响。确保用户控件不会在后台的任何地方被使用。 - Jordy van Eijk
@Saurabh 我认为没有必要,除了向解决方案添加几个文件外,我无法想到任何好处。如果它比可以在我的资源字典中定义的控件模板更有优势,请告诉我。 - Manvinder
@JordyvanEijk 我不明白“用户控件将不会在后台任何地方使用”这部分的意思,您是指在运行时(从cs文件)使用用户控件吗? - Manvinder
通常情况下,如果您使用控件模板的方式,可以验证可视树和逻辑树是否相同。我记得在考虑逻辑树时它们是不同的。 - terry
2个回答

1
我想知道这是否是一个好的做法。因此,首先我们应该定义什么是好的做法?我会给出敏捷好的实践观点:只有在需要时才这样做。因此对于您,答案就在您的问题中:
使用它在任何需要的地方。
它在其他任何地方都需要吗?如果是这样,请使用控件模板。如果不是,请使用用户控件,这将更容易阅读给下一个开发人员(保持简单)。

我不理解答案的第二部分。用户控件与控件模板一样可重用;您是否建议如果用户控件在多个地方使用,应将其转换为控件模板?为什么? - Cosmin Prund
我只是建议根据你的上下文来决定。我发现用户控件更易读,所以只有在必须使用控件模板的情况下才会使用它(也许是架构或遗留约束等原因)。但是由于MegaMind似乎更喜欢在他的上下文中使用控件模板,所以我只想说:至少只有在其他地方需要时才使用它。 - Ouarzy

1

由于最终这将成为一个UserControl,现在假设其他团队正在开发其他模块,并且他们需要此控件中Datagrid的Loaded事件。如果您将其创建为UserControl中的datagrid,则他们可以轻松访问该datagrid并订阅加载事件。如果您在ControlTemplate中执行此操作,则可能会很困难,甚至不可能。


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