- 1、本文档共2页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
自定义WPF布局面板
WPF学习 如何自定义WPF布局面板
WPF拥有很多布局面板,比如Grid,StackPanel等,这让我们的界面布局更加的灵活,但也许这些面板并不能完全满足你的需求,这时你需要自定义面板来满足你的布局要求。
1,面板布局是如何实现的
WPF布局引擎采用了一种递归的方式来实现控件及其子控件的布局,大致过程是这样的:要实现控件A的布局,那么先要实现A的子控件a1,a2,a3...的布局,要实现a1的布局,那么得实现a1的子控件a11,a12,a13...的布局,如此循环,然后但子控件的布局完成后,在完成父控件的布局,最后递归回去,递归结束,布局才算完成.
控件的最终大小和位置是由该控件和父控件相磋商来完成的,父控件先给出其能给予子控件的力所能及的布局空间,子控件在反馈给父控件一个自己的期望值,父控件最后根据自己所拥有的空间大小与子控件的期望值分配一定的空间给子控件并返回自己的大小.这一系列过程是通过重写面板的MeasureOverride和ArrangeOverride方法来完成的.
2,Size MeasureOverride(Size availableSize)方法
该方法为布局中控件所需要的空间大小进行评估。
参考如下代码:
以下是引用片段: protected override Size MeasureOverride(Size availableSize) { Size childrenSize = new Size(0, 0); foreach (UIElement child in this.Children) { child.Measure(new Size(Double.PositiveInfinity,Double.PositiveInfinity)); childrenSize.Width += child.DesiredSize.Width; childrenSize.Height += child.DesiredSize.Height; } return childrenSize;
}
在MeasureOverride阶段我们对面板中的每个Child调用了其Measure(Size sz)方法,该方法的作用是父控件告诉子控件其预计要分配给子控件的空间大小,对Child调用了该Measure方法后,子控件会在其内部给父控件一个回应以便告诉父控件它所期望的大小,而子控件的该期望值便保存在其child.DesiredSize中.如果Measure方法中传入的是正无穷大(new Size(Double.PositiveInfinity,Double.PositiveInfinity))时,相当于父控件在对子控件说尽管说出你所需要的大小吧,如果可以的话全世界都可以给你.
MeasureOverrice方法中的availableSize参数正是其父控件(你编写的面板控件以后在实际使用时其父控件)对其调用Measure方法时传入的值(减去一些边界值,比如要减掉Margin等)
MeasureOverride方法的返回值正是其告诉其父控件的期望值,即是其父控件(你编写的面板控件以后在实际使用时其父控件)对其调用Measure方法后,其DesiredSize值
注意:作为父控件,你可以很慈爱地仅可能地满足子控件的需要(尽管不一定有这能力),所以可以在对子控件调用Measure方法时传入一个正无穷大的尺寸,但作为子控件,你不能贪婪地向父控件索要正无穷大的空间,所以我们不能将正无穷大作为MeasureOverride方法的返回值,也不能直接将该方法的availableSize参数作为返回值(因为你的父控件有可能将正无穷大作为该参数传递给你)
3,Size ArrangeOverride(Size finalSize)方法
该方法作用在于为面板子控件提供布局空间即排列子控件并返回自身大小
参考下面的代码:
以下是引用片段: protected override Size ArrangeOverride(Size finalSize) { Point childPos = new Point(0, 0); foreach (UIElement child in this.Children) { child.Arrange(new Rect(childPos, new Size(child.DesiredSize.Width, finalSize.Height))); childPos.X += child.RenderS
您可能关注的文档
- 脑室出血引流.doc
- 脑和脊髓的被膜、脑脊液循环、脑血管和内脏神经.ppt
- 脚手架专项方案未含计算书.doc
- 脑科学对早期教育的启示和警示.ppt
- 脚手架工程专项施工方案落地、悬挑.doc
- 脓毒症、脓毒性休.ppt
- 脚手架施工方案修改.doc
- 脚本节点.ppt
- 脱硫系统烟道工程施工方案.doc
- 腐植酸肥料知识概述.doc
- 辽宁省鞍山市(新版)2024小学语文苏教版小升初质量检测(提分卷)完整试卷(含答案).docx
- 辽宁省辽阳市(新版)2024小学语文苏教版小升初模拟(预测卷)完整试卷(含答案).docx
- 辽宁省葫芦岛市(新版)2024小学语文统编版小升初真题(提分卷)完整试卷(含答案).docx
- 辽宁省锦州市(新版)2024小学语文苏教版小升初摸底(自测卷)完整试卷(含答案).docx
- 辽宁省营口市(新版)2024小学语文部编版小升初考试(预测卷)完整试卷(含答案).docx
- 辽宁省葫芦岛市(新版)2024小学语文苏教版小升初考试(冲刺卷)完整试卷(含答案).docx
- 辽宁省辽阳市(新版)2024小学语文部编版小升初核心能力评测(评估卷)完整试卷(含答案).docx
- 辽宁省葫芦岛市(新版)2024小学语文统编版小升初模拟(强化卷)完整试卷(含答案).docx
- 辽宁省锦州市(新版)2024小学语文统编版(五四制)小升初质量检测(预测卷)完整试卷(含答案).docx
- 辽宁省辽阳市(新版)2024小学语文统编版(五四制)小升初测试(提分卷)完整试卷(含答案).docx
最近下载
- 办公用品订购合同范本.docx VIP
- WORD版本刻度尺-A4纸打印可用.doc
- 90nm逻辑产品Peeling缺陷的解决方案.pdf
- 神经系统的分级调节.pptx VIP
- 中建施工总平面布置图设计(69页).pdf
- 2024年公共卫生与预防医学继续教育平台“大学习”活动线上培训栏目考试题库(1392题).docx
- 北师大版(2023)必修第一册 Unit 2 Sports and Fitness单元教学设计.pdf VIP
- 2016-2023年长沙民政职业技术学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析.docx
- 农业经济学-农业资金.ppt VIP
- 齐鲁医学神经系统疾病的辅助检查.ppt VIP
文档评论(0)