对于WPF / Silverlight布局,使用包含大量行和列或大量Stackpanel的网格会更好吗?
答案 0 :(得分:18)
如果您需要水平和垂直排列的东西,您应该使用网格。当这些东西不需要与其他任何东西对齐时,使用StackPanel创建一行或一列东西。
但是,不要局限于这两个选项。特别是,看看DockPanel。它比StackPanel稍微复杂一些,但它的标记并不像Grid那样杂乱。这是DockPanel上的一篇好文章:
答案 1 :(得分:3)
您使用的容器应该基于内容而不是一种方法是否优于另一种方法。如果你需要水平和垂直排列的东西,你真的应该使用网格。但除此之外,它实际上取决于您打算显示的内容。
答案 2 :(得分:1)
我认为Grid是一个更好的主意。我通常使用Grid设置总体布局,并在这里和那里使用一些堆栈面板来做一些特定的事情。我也觉得Grids的性能更好,而且Grids通常会给你更大的灵活性。
答案 3 :(得分:1)
我不认为Grid是一个更好的主意。
例如,如果要将行插入现有的Grid布局文档(在中间)exising行是1,2,3,4,然后要求是在1和2之间插入新行。
然后你必须将2,3,4改为3,4,5(发现所有标记都有变化....)
考虑一行是否有3到5列...重新排序所有数字是一项肮脏的工作。!!!
答案 4 :(得分:0)
我更喜欢StackPanel,因为我发现在插入新元素,行或列时更容易进行更改。使用网格,您需要读取行号和列号以找出您的位置。使用StackPanel,您只需遵循嵌套,这比网格更容易,更简单。
例如,在XAML页面中,我使用水平堆栈面板,如父网格,然后如果我需要一个列,我有一个单独的“垂直”stackpanel嵌套。这样,水平堆栈面变为“网格”,嵌套的垂直StackPanel成为列。我发现这更容易阅读和修改网格中的行和列。
答案 5 :(得分:0)
两者都有优势(网格/堆栈面板)。 网格的问题是生产线的重组。 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>
答案 6 :(得分:-1)
我没有这种布局的经验,但我敢打赌,与许多嵌套的堆叠面板相比,网格更容易渲染。