WPF Grid与Stackpanel

时间:2009-01-16 21:15:04

标签: wpf silverlight grid stackpanel

对于WPF / Silverlight布局,使用包含大量行和列或大量Stackpanel的网格会更好吗?

7 个答案:

答案 0 :(得分:18)

如果您需要水平和垂直排列的东西,您应该使用网格。当这些东西不需要与其他任何东西对齐时,使用StackPanel创建一行或一列东西。

但是,不要局限于这两个选项。特别是,看看DockPanel。它比StackPanel稍微复杂一些,但它的标记并不像Grid那样杂乱。这是DockPanel上的一篇好文章:

Using the DockPanel in Silverlight 2

答案 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)

我没有这种布局的经验,但我敢打赌,与许多嵌套的堆叠面板相比,网格更容易渲染。