(WPF学习记录)第十二章 自定义面板

来源:互联网 发布:网络语吃糠是什么意思 编辑:程序博客网 时间:2024/04/30 16:53

 Panel最大的好处是,它有Children属性可以进行孩子的排序。此属性的类别是UIElementCollection,负责处理对AddVisualChild、AddLogicalChild、RemoveVisualChild和RemoveLogicalChild,以进行孩子的增删。

第01个程序:统一的Grid

最简单的面板是UniformGrid。每个格子都是一样的宽和高。下面的类仿造UniformGrid的功能。

第1个文件:UniformGridAlmost.cs。

 

第2个文件:DuplicateUniformGrid.cs。

 

运行效果如下:

第02小程序:Canvas上绘图(PaintOnCanvasClone.cs)

Canvas在第七章介绍过,此面板类似传统的图形环境,利用坐标位置,指定元素的摆放地点。当有多个元素时,越早加入其中的元素出现在越下层(可被后加入的元素覆盖)。

 

运行结果:

第03个小程序:依对角线排列按钮

在Panel内添加Child时,一般的做法是:pnl.Children.Add(child),这样有件事不对劲,定义此child字段和属性的类,不知道有什么东西被加入或者删除了,也不知道什么时候调用的AddVisualChild、AddLogiclChild等。

一个可能的解决之道是写一个类似UIElementCollection的类,处理这件事,或者通知面板去做这件事。

第1个代码文件:DiagonalizeTheButtons.cs

 

有了这个类,加入孩子的时候就可以直接写pal.Add(child)。

第2个代码文件:DiagonalPanel.cs

 

运行效果:

 

第04个小程序:圆形排列按钮

一个圆可以被切割成多个扇形的小块。想将element排列成圆形,或许最直接的方式是让第个element都摆设在自己的小块内。

如下图所示,是一个小的扇形块,矩形表示按钮,从中心连到element右上角的这一条线,就是半径。

 

计算公式如下:

第01个代码文件:RadialPanelOrientation.cs

因为按钮通常都是宽(W)大于高(H),若按钮摆放方式不同(如旋转90度),这会影响半径的计算,不同的摆放方式会表现出来“以高度为主要决定因素”和“以宽度为主要决定因素”计算的半径。

 

第02个代码文件:RadialPanel.cs

第03个代码文件:CircleTheButtons.cs

运行效果如下:

 

 

原创粉丝点击