Windows Presentation Foundation系列(4)----公共布局属性

声明:欢迎任何人和组织转载本blog中文章,但必须标记文章原始链接和作者信息。

本文链接:http://www.cnblogs.com/leezhm/archive/2011/07/01/2095649.html

开拓进取的小乌龟------->CSDN 点滴点点滴滴 Blog

在WPF的布局中,除了不同的面板使用的不同的附加属性外,还有一些公共的布局属性。它们的存在,让布局系统更加功能强大,控制更精确。它们分别是

属性说明
Width为Element指定一个宽度。
Height为Element指定一个高度。
MinWidth允许的元素最小宽度。
MinHeight允许的元素最小高度。
MaxWidth允许的元素最大宽度。
MaxHeight允许的元素最大高度。
HorizontalAlignment控制元素的水平位置,当元素小于可用空间的时候。
VerticalAlignment控制元素的垂直位置,当元素小于可用空间的时候。
Margin设置元素与周围边框的间距。
Padding设置元素边框与元素内部内容之间的间距
Visibility设置元素在布局系统中是否可见。
FlowDirection设置文本的方向。
Panel.ZIndex设置元素的Z轴,控制元素的现实顺序。
RenderTransform对元素设置一个转换,不影响布局系统。
LayoutTransform对元素设置一个转换,会影响布局系统,触发系统再次进行布局。
上面表格中的所有属性,除了Padding和Panel.ZIndex外,其余的都是FrameworkElement类的属性,大部分的WPF控件都是集成自FrameworkElement。
 
(1) Width和Height
通过Width和Height可以设置一个控件的精确的固定大小,但是在实际应用中我们应该尽量避免使用它俩,更应该让控件来决定自身的大小,通过允许控件根据内容来调整大小,方便用户改变界面,布局重新调整。因为如果你设置了固定的大小,布局在每一次调整中总是尽量试图遵循你的选择,满足固定尺寸,进行多次运算。
 
(2) MinWidth、MinHeight、MaxWidth和MaxHeight
明显它们是设置控件大小的下限和上限的,在你需要限制面板的布局的时候,给你提供了最好最合适的方法。但是也是在合理的范围内有效,比如你把MinWidth设置10000,这个明显就不能被实现,WPF无法满足你的要求。
 
(3) HorizontalAlignment和VerticalAlignment
当父元素中可用空间找过了子元素所需要的空间的时候,布局会涉及到剩余空间的填充的问题。此时可以通过这些属性来控制子元素的位置。比如一个Orientation设置成Vertical的StackPanel通常会与其中的最宽的一个子元素一样宽,这就意味着其它的较窄的元素与面板边界会有一定的额外空间,此时必须使用对齐方式,来决定元素怎么样来处理剩余的空间。
这两个属性的默认值都是Stretch,即是当有额外的空间的时候,元素被放大来填充空间。HorizontalAlignment还可以设置为Center,Left,Right,而VerticalAlignment可以设置为Center,Bottom和Top。具体通过下面几张图片内容对比来理解上面这些。

      当控件分别设置了MaxWidth和MaxHeight,而且面板有额外的可用空间的时候,控件会以它的MaxWidth和MaxHeight的值来布局显示。当面板无额外的空间,但是比空间设置的MinWidth和MinHeight大的时候,控件会以布局可用空间大小来进行布局。当布局大小小于控件设置MinWidth和MinHeight的时候,控件不会改变大小,但是如UniformGrid这样的面板中会进行裁

 

      当设置了控件的HorizontalAlignment和VerticalAlignment之后,面板会分别以MinWidth和MinHeight来布局控件。所以当同时设置横向和纵向后,控件会以最小的尺寸来布局。而当控件同时设置了Width和Height的固定值之后,面板会以固定值来显示控件。

(4) Margin

        Margin的作用是调整元素周围的空间,与面板边缘的间距(不完全准确的,更准确的是与周围元素边缘的间距)。关于具体的使用方法,看MSDN的截图:

(5)Padding

       Padding是指定元素边框与内部内容之间的间距。由于并不是所有的WPF元素都有内部内容,所以并非所有的WPF元素都有Padding属性的。具体见MSDN解释:

(6)Visibility & FlowDirection & Panel.ZIndex

       Visibility决定了元素是否可见,由枚举System.Windows.Visibility来决定其值,由于它不同的枚举值会涉及到是否影响布局,所以要谨慎。如下表为具体值:

成员名称

说明

Visible

显示元素

Hidden

不显示元素,但是为元素保留布局空间

Collapsed

不显示元素,且不为元素保留布局空间

 
FlowDirection可以控制文本的方向( 注:虽然它主要是用来控制文本方向的,但是它同样对WrapPanel面板起作用,影响到WrapPanel中元素排列的顺便,左到右,或者右到左),默认情况下是基于系统的本地设置。
 
Panel.ZIndex是一个附加属性,决定了重叠的两个元素的显示顺序。默认情况下,元素的ZIndex是由它们定义的顺序来决定的,但是可以通过显式指定ZIndex的值来决定元素的显示顺序。
 
(7)RenderTransform & LayoutTransform
在WPF中可以使用RenderTransform和LayoutTransform进行元素的的缩放,旋转,虽然效果一样,但是他们之间也有不同。LayoutTransform变换引起的变化将被纳入布局系统的计算范围,而RenderTransform变换引起的变法则被忽略。显然每一次LayoutTransform变换都会引起面板触发一个布局,在一些不必要的情况下,肯定会大量消耗系统的资源的。所以在满足要求的情况下,要禁止使用layoutTransform的。
简单实例通过如下两张截图来理解:
 

       

显然,通过上面的对比,LayoutTransform引起了面板布局的变化,而RenderTransform的变法则被忽略了.

 

总结:上面简单介绍了几个公共的布局属性,具体的应用还需要在实践中去总结,熟能生巧的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值