在WPF中编写过多自定义控件的问题

时间:2014-07-23 13:22:27

标签: wpf mvvm wpf-controls

我正在开发新的WPF / MVVM项目,在那里我看到所有大多数控件都是针对不同需求编写的,从文本框到树视图。所有都是为了简单的需要而重写的,例如,网格,堆栈面板控件被重写以在每个项目之间添加空间,并且文本框被重写以包括它的标签,以便它具有标签和文本输入本身。

我的问题:由于这种定制,我们会遇到任何严重的问题吗? 我已经看到调整所有控件的问题,我会因此而看到更多问题吗?

1 个答案:

答案 0 :(得分:1)

您永远不应创建自定义或用户控件来将边距,标签添加到TextBox或新ItemTemplate添加到ListBox

UserControl用于将经常使用的控件组合分组为一个可重复使用的控件。示例可以是打开对话框的自定义List-of-Values控件。这可以作为UserControl实现。

当本机控件不符合您的需要时,自定义控件很好。假设您要从头开始重新实现DateTimePicker,因为本机不包含毫秒。

没有严重的问题,但您可能会发现自己在未来几年内保留所有这些控制,而无需这样做。

设置边距应该在您使用它的ViewStyle中的ResourceDictionary上完成。

这当然只是我的意见(以及许多其他人的意见,除了我),但如果您发现大多数控件都是定制的'这样,你做错了。

StyleTemplates而不是UserControls和自定义控件。

主要问题是您无法仅在单个视图中更改边距。如果您更改自定义控件'内部填充和边距,您将更改解决方案中的所有视图。如果使用样式,则可以通过在视图中定义新样式或直接设置属性来覆盖它。