繁体   English   中英

WPF Grid与Stackpanel

[英]WPF Grid vs Stackpanel

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

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

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

在Silverlight 2中使用DockPanel

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

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

例如,如果要向现有Grid布局文档插入行(在中间)

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

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

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

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

我更喜欢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>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM