Cui*_*崔鹏飞 5 silverlight wpf custom-controls windows-phone-7
假设我需要创建一个名为PictureWall的类,它将用于显示图片.
现在我发现Panel和ItemsControl都可以用来保存Children元素.类PictureWall应该从Panel派生吗?或者它应该来自ItemsControl.
注意:这不是一个真正的要求,它只是一个假设的问题.真正的问题是:何时应该创建Control(或ItemsControl)的子类,何时应该创建Panel的子类?
注2:这种想象的图片墙控件不能仅用于一个应用程序.它可能被其他开发人员使用.如果它派生自Panel或ItemsControl,它会将名为Children的属性公开给其他开发人员.所以在这种情况下,从Control派生是一个更好的主意,对吧?
注3:这个想象的图片墙控件有自己的默认加载某些图片的方式(例如,从服务器拉图片),并且不希望这种方式被搞乱.如果是这种情况,那么我们不应该继承ItemsControl,对吧?
Panel是一个用于安排孩子的容器.例如:网格底部有一个标题和一个按钮,中心有一个图像 - 网格非常灵活,可以帮助您移动内容并在更改窗口大小等时对其进行排列.
ItemsControl是一个控件,可以帮助您处理项目集合.我们来看一个具体的例子:Listbox.您可以非常轻松地显示项目列表,向所有项目展示applay模板,依此类推.
Control类基本上是一个可以拥有自己模板的UI元素.
请注意,定义自己的UserWtrol,编辑模板或PictureWall的样式,子类化的方法要好得多(有很多优点,例如你可以使用Blend来重新定义样式).
编辑:
@ 笔记2
如果我是你,我会让自己的用户控件重用现有的控件来制作我想要的东西.如果这还不够,我会继承Control.
[StyleTypedProperty(Property = "FooStyle", StyleTargetType = typeof(Control))]
public partial class MyDangControl: Control
{
...
Run Code Online (Sandbox Code Playgroud)
@ note3
把这一切结合在一起是一个坏主意.您应该拆分从Picture Wall获取数据的逻辑.例如,用户按下缩略图以下载图像并且整个UI挂起.可怕的用户体验.
控制
这是从头开始构建控件时最常见的起点.它是所有用户交互式小部件的基类.Control类添加了用于设置背景和前景的属性,以及内容的字体和对齐方式.控件类还将自身置于Tab键顺序(通过IsTabStop属性),并引入了双击(通过MouseDoubleClick和PreviewMouseDoubleClick事件)的概念.但最重要的是,Control类定义了Template属性,该属性允许将其外观与自定义元素树交换出来,以获得无限的灵活性.
ContentControl中
这是可以显示单个任意内容的控件的基类.该内容可以是与模板结合使用的元素或自定义对象.(内容通过Content属性设置,可以在ContentTemplate属性中提供可选模板.)许多控件包装特定的,有限类型的内容(如文本框中的文本字符串).由于这些控件不支持所有元素,因此不应将它们定义为内容控件.
ItemsControl的
ItemsControl是包装项列表但不支持选择的控件的基类,而Selector是支持选择的控件的更专用的基类.这些类通常不用于创建自定义控件,因为ListBox,ListView和TreeView的数据模板功能提供了很大的灵活性.
面板
这是具有布局逻辑的控件的基类.布局控件可以容纳多个子节点并根据特定的布局语义排列它们.通常,面板包括可以在子项上设置的附加属性,以配置子项的排列方式.
| 归档时间: |
|
| 查看次数: |
366 次 |
| 最近记录: |