在stackpanel -Silverlight上均匀分隔空间项目

时间:2014-05-24 01:15:13

标签: .net silverlight xaml

我有一个<StackPanel>控件,我填充了TextBox个控件。

我想在TextBox个对象上垂直间隔。但是,对于我的代码,即使我已将<StackPanel>设置为Stretch,所有三个TextBox仍然会分组在VerticalAligment的顶部。

也不确定这是否有帮助,我的LayoutRoot是一个Grid 8 x 8和边框alignes来填充大部分LayoutRoot

我无法手动为每个文本框分配边距,因为StackPanel将手动填充,TextBoxes的数量可能会有所不同。

    <Border  
        Grid.Row="1" 
        Grid.RowSpan="6"
        Grid.Column="0"
        Grid.ColumnSpan="8"
        BorderBrush="Black"
        Background="White">

            <StackPanel x:Name="listItems" 
                Grid.Row="1" 
                Grid.RowSpan="6"
                Grid.Column="0"
                Grid.ColumnSpan="8"
                Margin="10"

                HorizontalAlignment="Left"
                VerticalAlignment="Stretch">

                   <TextBox Text="line 1" />
                   <TextBox Text="line 2" />
                   <TextBox Text="line 3" />

            </StackPanel>

    </Border>

2 个答案:

答案 0 :(得分:1)

看一下这个链接:http://blogs.msdn.com/b/devdave/archive/2008/07/26/layout-fundamentals-part-2-layout-containers.aspx它非常适合解释Silverlight布局面板及其选项。我将使用一个垂直对齐拉伸和网格行定义没有高度设置的网格,因为这将为您平均划分网格行之间的可用空间。像这样:

<Border  
    Grid.Row="1" 
    Grid.RowSpan="6"
    Grid.Column="0"
    Grid.ColumnSpan="8"
    BorderBrush="Black"
    Background="White">

        <Grid x:Name="listItems" 
            Grid.Row="1" 
            Grid.RowSpan="6"
            Grid.Column="0"
            Grid.ColumnSpan="8"
            Margin="10"

            HorizontalAlignment="Left"
            VerticalAlignment="Stretch">
            <Grid.RowDefinitions>
               <RowDefinition />
               <RowDefinition />
               <RowDefinition />
            </Grid.RowDefinitions>

               <TextBox Grid.Row="0" Text="line 1" />
               <TextBox Grid.Row="1" Text="line 2" />
               <TextBox Grid.Row="2" Text="line 3" />

        </Grid>

</Border>

答案 1 :(得分:1)

您可以使用UniformGrid来实现动态数量为TextBlock s的均匀分布的垂直空间。例如:

XAML:

<UniformGrid x:Name="listItems" 
    Grid.Row="1" 
    Grid.RowSpan="6"
    Grid.Column="0"
    Grid.ColumnSpan="8"
    Margin="10"
    HorizontalAlignment="Left"/>

代码隐藏:

//populate the UniformGrid dynamically from code :
int numberOfRow = 3;
listItems.Columns = 1;
listItems.Rows = numberOfRow;
for (int i = 0; i < numberOfRow; i++)
{
    var txt = new TextBlock { Text = "test " + i };
    listItems.Children.Add(txt);
}