15

对于 WPF/Silverlight 布局,使用具有大量行和列的 Grid 还是使用大量 Stackpanel 更好?

4

7 回答 7

22

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

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

在 Silverlight 2 中使用 DockPanel

于 2009-01-16T21:56:49.657 回答
3

您使用的容器应该基于内容,而不是一种方法是否优于另一种方法。如果你需要水平和垂直排列的东西,你真的应该使用网格。但除此之外,这实际上取决于您打算显示的内容。

于 2009-01-16T21:41:37.410 回答
1

我认为网格是一个更好的主意。我通常使用 Grid 设置总体布局,并在这里和那里使用一些堆栈面板来做一些特定的事情。我也有一种感觉,网格的性能更好,而且网格通常会给你更多的灵活性。

于 2009-01-16T21:47:22.140 回答
1

我不认为 Grid 是一个更好的主意。

例如,如果您想在现有的 Grid 布局文档中插入一行(在中间)

现有行是 1,2,3,4 ,那么要求是在 1 和 2 之间插入新行。

然后您必须将 2,3,4 更改为 3,4,5 (查找所有标记更改....)

想想如果一行有 3 - 5 列......重新排序所有数字是一项肮脏的工作。!!!

于 2013-01-18T16:42:45.983 回答
0

我更喜欢 StackPanel,因为我发现在插入新元素、行或列时更容易进行更改。使用网格,您需要阅读行号和列号以找出您的位置。使用 StackPanel,您只需跟随嵌套,这比网格更容易且不那么混乱。

例如,在 XAML 页面中,我使用像父网格一样的水平堆栈面板,然后如果我需要一个列,我会嵌套一个单独的“垂直”堆栈面板。这样,水平堆栈面板变成了“网格”,嵌套的垂直堆栈面板变成了列。我发现这更容易阅读和修改网格中的行和列。

于 2013-08-15T05:22:10.410 回答
0

两者都有力量(网格/堆栈面板)。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>
于 2019-02-23T15:13:48.383 回答
-4

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

于 2009-01-16T21:30:42.953 回答