欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

WPF DesiredSize & RenderSize

程序员文章站 2022-12-10 23:32:29
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>

WPF DesiredSize & RenderSize

根据如上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);