在WPF(或silverlight)中何时应创建Control的子类以及何时应创建Panel的子类?
他们每个人的适用场景是什么?
答案 0 :(得分:3)
当我有一个严格的结构时,我使用自定义控件 - 这意味着我可以在Xaml中准确地列出我想要的内容,即使我可能通过使多个Xaml定义看起来完全不同来调整控件。一个例子是我写的电子表格控件。一个Xaml定义具有一定的颜色和菜单和按钮的布局,另一个是完全不同的。当我使用自定义控件时,我总是知道我要布置的内容。
当我有一个更动态的排列时,我会使用自定义面板,我需要覆盖MeasureOverride和ArrangeOverride,这些通常是虚拟的,这意味着我只实例化可见的内容。我编写的一个自定义面板示例显示了数百个图像。您可以更改布局(例如,一堆页面,两个并排,或平铺,以便尽可能多的适合)和缩放级别。我只阅读并显示自定义面板中可见的图像,并且有一个滚动条可以平移它们。
大多数标准面板,如Grid,StackPanel等,都是微软编写的自定义面板。这应该让您了解自定义面板的用途 - 以特定模式排列未知数量的子元素。另一方面,自定义控件用于设计特定的UI,通常是可通过Xaml样式进行换肤的UI。
答案 1 :(得分:2)
一个考虑因素是,当您需要新行为时,通常只会在WPF / Silverlight中创建自定义控件。如果你想要改变的只是外观,通常可以使用样式,控制模板......