当前位置: 首页 > news >正文

WPF笔记(2.9和2.10)——Layout

原文: WPF笔记(2.9和2.10)——Layout

 2.9讲的是,如果内部设定超过容器大小,怎么办?
StackPanel会裁剪越界部分
DockPanel和Grid会智能判断,从而决定换行。

2.10 自定义布局容器
自定义容器要实现两个方法MeasureOverride和ArrangeOverride,并保证遍历其下的所有子控件,使他们都执行Measure和Arrange方法。

img_a6339ee3e57d1d52bc7d02b338e15a60.gif using  System;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using  System.Windows.Controls;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
using  System.Windows;
img_a6339ee3e57d1d52bc7d02b338e15a60.gif
img_405b18b4b6584ae338e0f6ecaf736533.gifimg_1c53668bcee393edac0d7b3b3daff1ae.gif
namespace  CustomPanel  img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif {
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif    
public class DiagonalPanel : Panel img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
protected override Size MeasureOverride( Size availableSize ) img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            
double totalWidth = 0;
img_33d02437d135341f0800e3d415312ae8.gif            
double totalHeight = 0;
img_33d02437d135341f0800e3d415312ae8.gif
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
foreach( UIElement child in Children ) img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif                child.Measure( 
new Size( double.PositiveInfinity,
img_33d02437d135341f0800e3d415312ae8.gif                                         
double.PositiveInfinity ) );
img_33d02437d135341f0800e3d415312ae8.gif                Size childSize 
= child.DesiredSize;
img_33d02437d135341f0800e3d415312ae8.gif                totalWidth 
+= childSize.Width;
img_33d02437d135341f0800e3d415312ae8.gif                totalHeight 
+= childSize.Height;
img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            
return new Size( totalWidth, totalHeight );
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_33d02437d135341f0800e3d415312ae8.gif
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif        
protected override Size ArrangeOverride( Size finalSize ) img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif            Point currentPosition 
= new Point( );
img_33d02437d135341f0800e3d415312ae8.gif
img_2887d91d0594ef8793c1db92b8a1d545.gifimg_7a2b9a960ee9a98bfd25d306d55009f8.gif            
foreach( UIElement child in Children ) img_a76e9bb6ed00cf1c9c9f4ee2f04b558b.gif{
img_33d02437d135341f0800e3d415312ae8.gif                Rect childRect 
= new Rect( currentPosition, child.DesiredSize );
img_33d02437d135341f0800e3d415312ae8.gif                child.Arrange( childRect );
img_33d02437d135341f0800e3d415312ae8.gif                currentPosition.Offset( childRect.Width, childRect.Height );
img_105a1e124122b2abcee4ea8e9f5108f3.gif            }

img_33d02437d135341f0800e3d415312ae8.gif
img_33d02437d135341f0800e3d415312ae8.gif            
return new Size( currentPosition.X, currentPosition.Y );
img_105a1e124122b2abcee4ea8e9f5108f3.gif        }

img_105a1e124122b2abcee4ea8e9f5108f3.gif    }

img_05dd8d549cff04457a6366b0a7c9352a.gif}

 

相关文章:

  • redis ins 调试
  • Oracle oradebug 命令 使用说明
  • 使用C#在VS中开发:未处理AccessViolationException “System.AccessViolationException”类型的未经处理的异常...
  • **PHP分步表单提交思路(分页表单提交)
  • mongodb 数据库操作--备份 还原 导出 导入
  • jboss部署出现MarshalOutputStream找不到错误
  • 于erlang依赖的linux调优
  • 集群RPC通信
  • session的存储方式和配置
  • VS2013和VS2008项目的互通
  • Mapeduce编程八大步骤
  • Linux USB Host-Controller的初始化代码框架分析【转】
  • request和request.form和request.querystring的区别
  • 【小窍门】浏览器兼容圆角Border-radius的问题
  • intellij (org.jdom.input.JDOMParseException) Error on line 1: 前言中不允许有内容。
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 2017-08-04 前端日报
  • Git同步原始仓库到Fork仓库中
  • JAVA多线程机制解析-volatilesynchronized
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • PHP面试之三:MySQL数据库
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • spring + angular 实现导出excel
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • Vultr 教程目录
  • 读懂package.json -- 依赖管理
  • 分布式事物理论与实践
  • 基于组件的设计工作流与界面抽象
  • 精彩代码 vue.js
  • 力扣(LeetCode)56
  • 深度解析利用ES6进行Promise封装总结
  • 数据结构java版之冒泡排序及优化
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 转载:[译] 内容加速黑科技趣谈
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • # 职场生活之道:善于团结
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (11)MSP430F5529 定时器B
  • (23)mysql中mysqldump备份数据库
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (C语言)二分查找 超详细
  • (done) 两个矩阵 “相似” 是什么意思?
  • (HAL库版)freeRTOS移植STMF103
  • (web自动化测试+python)1
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十八)三元表达式和列表解析
  • (转) Face-Resources