WPF:创建UserControl还是CustomControl?

3
我不是非常清楚何时使用CustomControl和UserControl。基本上,我知道使用模板时CustomControl可以进行更多的自定义。我想在WPF中制作一个“文件浏览”控件(TextBlock显示当前路径+按钮触发“打开文件对话框”)。但我不确定是否应该总是将其“替换”为一个WPF控件。我更认为CustomControl更像是一种显示和编辑一个新语义值(在我的情况下,是一个“文件(路径)”)的方式。所以,如果我们不考虑哪个更容易实现,对于我所说的“文件浏览”控件,CustomControl和UserControl之间哪一个更合适呢?谢谢
3个回答

6

自定义控件:

  • 与代码和UI松散耦合
  • 派生自Control
  • 在ResourceDictionary中定义UI
  • UI可以在不同的项目中更改
  • 具有完整的工具箱支持
  • 定义单个控件
  • 更灵活

用户控件:

  • 与代码和UI紧密耦合
  • 派生自UserControl
  • 将UI定义为普通XAML
  • UI是固定的,不能在不同的项目中具有不同的外观
  • 无法添加到工具箱中
  • 定义一组控件
  • 不像自定义控件那样灵活

当我们谈论差异时,更重要的是强调何时使用何种控件的上下文:

  • 当您的UI具有快速且固定的内容时,请使用UserControl。
  • 当您想要将主视图的某些基本功能分离为一些具有可重用性的较小模块时,请使用UserControl。
  • 当您想要在不同的项目中使用控件,并且每个项目可能希望更改外观时,请使用CustomControl。
  • 当您想要为控件实现一些附加功能时,请创建一个从基本控件派生的CustomControl。
  • 当您想要为控件应用主题时,请使用CustomControl。
  • 当您想要为控件添加工具箱支持,以便用户能够在设计器中执行拖放操作时,请使用CustomControl。

你有关于“当你想要实现一些额外的功能”方面的例子吗?因为使用UserControl也可以添加一些新的功能。 - J4N
自定义控件 - 像支持主题的系统掩码日期选择器。用户控件 - 带有附加按钮的日期选择器。 - Nikita Shrivastava

1
我认为选择一个UserControl是最好的,因为它用于"现有控件的组合"。在你的情况下,就是一个按钮和文件打开对话框。然后它会获得特定的外观和感觉(例如按钮的默认外观和文件打开对话框的默认外观)。 CustomControl则正好相反。它本身没有外观和感觉。在布局方面完全抽象。当给它分配样式时,布局才起作用。

是的,但实际上,这个控件并不是绝对用来排列控件的,它更多的是提供了一个可用于编辑“FilePath”的控件。 - J4N
@J4N:当然,如果你愿意,你可以构建一个“CustomControl”,但构建一个“UserControl”可能就足够了,而且可能更容易些。 - blueprint

0
通常情况下,自定义控件是在现有控件的基础上进行扩展,而用户控件则是从一组现有控件中创建新的控件类型。根据您提供的信息,我认为用户控件更适合。

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