WPF DesiredSize & RenderSize

Posted kybs0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF DesiredSize & RenderSize相关的知识,希望对你有一定的参考价值。

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); 

以上是关于WPF DesiredSize & RenderSize的主要内容,如果未能解决你的问题,请参考以下文章

WPF,动画绑定问题

如何设置 UIElement 的 DesiredSize.Width?

在目录/子目录中生成文件文件夹 list.txt 文件并在批处理文件中使用 dir 和 ren 命令将 list.txt 重命名为文件夹/子文件夹名称

一键修改文件名步骤及问题

WPF自定义控件与样式(15)-终结篇 & 系列文章索引 & 源码共享

WPF & Orchestra 入门 [关闭]