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的主要内容,如果未能解决你的问题,请参考以下文章

WPFの获取任意元素的位置

WPF学习第七章 WrapPanel和DockPanel面板

网格和stackpanel之间的WPF组合

StackPanel与Grid交叉使用

WPF-Binding的源

StackPanel中的WebBrowser不会在WPF中扩展到其内容大小