wpf与winform布局比较

看了看winform工程中的工具箱,有以下发现

FlowLayoutPanel?这个应该就是WrapPanel,没什么悬念。

Panel?看了下MSDN,感觉就是ScrollViewer的弱智版本。

TableLayoutPanel?找到宝了,这个就是Grid阿!哈哈哈!使用几乎一模一样。行列宽度都是三种模式,按比例、自动、固定。子元素布局也一样,行列跟行列Span。

就这些了,难道还要教你GroupBox和TabControl?还有SplitXx有待研究。

 

接下来谈谈子元素布局的问题。

首先winform默认的布局就是Canvas,绝对坐标。只有左上角计算方式,相当于Canvas.Top和Canvas.Left,值是Location.X 和Location.Y。

Dock默认是None,如果设置的话,你会发现它就是在设置DockPanel.Dock,值有上下左右,多了个中(Fill),其他一模一样,虽然没有DockPanel这个父控件,也就是说所有能容纳子控件的都能作为DockPanel,哈哈。而Fill呢,它的效果就是LastChildFill为真时的LastChild,也就是HorizontalAlignment和VerticalAlignment都被设置成Stretch的效果。

Anchor属性默认被设置为左上,它可不是Canvas的计算方式。从目前测试的结果能在TableLayoutPanel的格子中有效(Panel和Window下不起作用)。它像word中表格里的文字排版那样,有九个方式,还记得吗?左上,上中,右上。左中,中,右中。左下,下中,右下。这九种方式是你选择两个以内且相邻方向能排版的效果。如果你同时设置左上右,那么效果和设置Dock为Top一样,完全没区别。当你设置左右,就相当于HorizontalAlignment=Stretch且VerticalAlignment=Center。好,你已经完全知道]怎样控制子元素了,很容易就能把WPF下的布局转换过来。

Dock和Anchor你最后设置哪个另一个会失效。Dock被设置后Anchor变成左上,Anchor被设置后Dock变成None。

Margin和Padding和WPF一样。

最后两个要注意的属性是AutoSize和AutoSizeMode,根据内容设置尺寸,相当于Window.SizeToContent,和Width同时Height为NaN的情况。尤其是AutoSizeMode的值,有俩,GrowAndShrink才能使刚才说的WPF效果出来,而GrowOnly则相当于设置了MinWidth和MinHeight为内容大小(应该也多一点)。

你可能感兴趣的:(wpf)