WPF DesiredSize & RenderSize
程序员文章站
2022-05-16 10:22:10
DesiredSize DesiredSize介绍 关于DesiredSize的介绍,可以查看最新微软文档对DesiredSize的介绍 DesiredSize,指的是元素在布局过程中计算所需要的大小。 通过调用方法Measure计算得到DesiredSize DesiredSize的几个概念: D ......
desiredsize
desiredsize介绍
关于desiredsize的介绍,可以查看最新微软文档对desiredsize的介绍
desiredsize,指的是元素在布局过程中计算所需要的大小。
通过调用方法measure计算得到desiredsize
1 element.measure(availablesize); 2 var desiredsize = element.desiredsize;
desiredsize的几个概念:
- desiredsize是布局过程中使用的
- desiredsize是一个只读属性
- 除了宽高(width/height,max/min width/height)会影响desiredsize的值,margin也会直接影响desiredsize
desiredsize的宽高
如下是对desiredsize的宽高测试demo:
1 <window x:class="desiredsizetest.mainwindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:desiredsizetest" 7 mc:ignorable="d" 8 title="mainwindow" height="300" width="500"> 9 <grid> 10 <button x:name="testbutton" width="100" height="30" margin="10,2" padding="2,1" verticalalignment="top" content="测试desiredsize" click="testbutton_onclick"></button> 11 </grid> 12 </window>
根据如上demo,可以得知此demo中,
desiredsize.width=width+水平方向margin值,
desiredsize.height=height+竖直方向margin值
所以如果只是获取控件的实际宽高,不应该通过desiredsize.width/height获取。
rendersize
rendersize是布局结束后元素的大小,与actualheight、actualwidth类似。
所以,wpf布局时,先计算子元素的大小(desiredsize),然后再得到最终渲染后的父元素大小(rendersize)。
可以在onrender和getlayoutclip方法执行后,获取下最新的rendersize,确认是否预期结果。
关于rendersize的大小变化,可以监听事件onrendersizechanged
protected internal virtual void onrendersizechanged (system.windows.sizechangedinfo info);