WPF很棒,因为有许多方法可以实现你的目标。例如,据我所知,装饰器可以向UI元素添加一些控件,但我认为通过包含附加元素的自定义控件也可以实现相同的行为。
那么,我的问题是:在什么情况下应该优先使用装饰器,而不是更复杂(但我认为更灵活)的自定义控件? 请考虑到我广泛使用MVVM模式,并且我想将命令绑定到附加元素。
特别是,在设计图表设计器应用程序时,我想向我的形状添加连接点。另一个需要在自定义控件和装饰器之间进行选择的示例是显示一个标签的线,该标签自动定位以“跟随”该线。
谢谢
相较于使用 ControlTemplates,在大多数情况下,Adorners 需要做更多的工作。如果你想使用 Adorners 提供的额外功能,请使用它们。否则请使用 ControlTemplates。
以下是 Adorners 带来的主要功能:
以下是使用 Adorners 相对于 ControlTemplates 可能存在的一些成本:
.GetAdornerLayer()
和 .Add()
的代码,并管理 Adorner 的生命周期。DataContext="{Binding AdornedElement.DataContext}"
。在您的特定示例中,没有明确的正确答案。
我倾向于为连接点使用 ControlTemplate,因为您可能需要一种指定连接点位置的方法,而 ControlTemplate 已经定义了项本身的布局。另一方面,如果连接点信息是数据驱动的,并且仅出现在活动控件(或正在拖动的控件)上,那么使用 adorner 来获得性能优势并简化单个 ControlTemplate 可能更好。
如果线条不是简单的直线,则自动定位的标签从测量/排列计算的角度来看可能非常适合作为 adorner,但如果您可能会同时看到成千上万个这些标签,我会担心性能问题。
如果不了解您的应用程序,很难说更多的内容。