WPF Grid与Stackpanel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF Grid与Stackpanel相关的知识,希望对你有一定的参考价值。
对于WPF / Silverlight布局,使用具有大量行和列或大量Stackpanel的Grid是否更好?
如果需要水平和垂直排列的东西,您应该使用网格。当这些东西不需要与其他东西对齐时,使用StackPanel创建一行或一列东西。
但是,不要仅限于这两个选项。特别是,看看DockPanel。它比StackPanel稍微复杂一些,但它的标记并不像Grid那样杂乱。这是DockPanel上的一篇好文章:
Using the DockPanel in Silverlight 2
您使用的容器应该基于内容而不是一种方法是否优于另一种方法。如果你需要水平和垂直排列的东西,你真的应该使用网格。但除此之外,它实际上取决于您打算显示的内容。
我认为Grid是一个更好的主意。我通常使用Grid设置总体布局,并在这里和那里使用一些堆栈面板来做一些特定的事情。我也有一种感觉,Grids的性能更好,而且Grids通常会给你更多的灵活性。
我不认为Grid是一个更好的主意。
例如,如果要向现有Grid布局文档插入行(在中间)
现有行是1,2,3,4,然后要求是在1和2之间插入新行。
然后你必须将2,3,4更改为3,4,5(找到所有标记更改....)
想想如果一行有3到5列...重新排序所有数字都是一项肮脏的工作。!!!
我更喜欢StackPanel,因为我发现在插入新元素,行或列时更容易进行更改。使用网格,您需要读取行号和列号以找出您的位置。使用StackPanel,您只需遵循嵌套,这比网格更容易,更简单。
例如,在XAML页面中,我使用水平堆栈面板,如父网格,然后如果我需要一个列,我有一个单独的“垂直”stackpanel嵌套。这样,水平堆栈面变为“网格”,嵌套的垂直StackPanel成为列。我发现这更容易阅读和修改网格中的行和列。
两者都有力量(Grid / Stackpanel)。 Grid的问题在于线路重组。 Stackpanel的问题是没有表结构(固定列宽)。所以我认为这是解决这个问题的好方法:-)
定义样式
<Page.Resources>
<Style x:Key="LabelCol1" TargetType="Label">
<Setter Property="Width" Value="200" />
</Style>
<Style x:Key="EditCol2" TargetType="TextBox">
<Setter Property="Width" Value="250" />
<Setter Property="TextWrapping" Value="Wrap" />
<Setter Property="Margin" Value="3" />
</Style>
<Style x:Key="ButtonCol3" TargetType="Button">
<Setter Property="Width" Value="120" />
<Setter Property="Margin" Value="3" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</Page.Resources>
并将样式用于Stackpanel
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label Style="{StaticResource LabelCol1}" Content="Solution path" />
<TextBox Style="{StaticResource EditCol2}" />
<Button Style="{StaticResource ButtonCol3}" Content="Open..." />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Style="{StaticResource LabelCol1}" Content="Solution name" />
<TextBox Style="{StaticResource EditCol2}" />
</StackPanel>
</StackPanel>
我没有这种布局的经验,但我敢打赌,与许多嵌套的堆栈面板相比,网格更容易渲染。
以上是关于WPF Grid与Stackpanel的主要内容,如果未能解决你的问题,请参考以下文章