码迷,mamicode.com
首页 > Windows程序 > 详细

WPF DesiredSize & RenderSize

时间:2018-10-11 13:00:29      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:csharp   red   max   nal   soft   actual   style   oid   pat   

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

标签:csharp   red   max   nal   soft   actual   style   oid   pat   

原文地址:https://www.cnblogs.com/kybs0/p/9771756.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!