Silverlight动态大小的表

时间:2009-04-22 14:42:12

标签: silverlight xaml

我对Silverlight很新,所以如果这个问题很明显我很抱歉,但是我想创建一个类似于HTML表的东西,它可以有从1到x的任意数量的行。

我需要使用添加到其中的行数来增长表。另外,我希望能够将表的宽度和高度设置为一个整体,并使每行中的所有文本都能够适当地动态调整大小。

这样的XAML会是什么样的?

干杯,克里斯。

编辑:

感谢您的回复,看来我想要的是将所有建议存档的混合物:

  <Grid x:Name="ExampleGrid" Height="150" Width="300" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
  <Grid.RowDefinitions>
      <RowDefinition Height="*"/>
      <RowDefinition Height="*"/>
      <RowDefinition Height="*"/>
  </Grid.RowDefinitions>
  <Viewbox Stretch="Fill"  Grid.Row="0">
    <!-- Two column header -->
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="Text One" Height="Auto" />
        <TextBlock Text="Text One" Height="Auto" />
    </StackPanel>
  </Viewbox>
  <Viewbox Stretch="Fill"  Grid.Row="1">
    <TextBlock Text="Text Two" Height="Auto" />
  </Viewbox>
  <Viewbox Stretch="Fill"  Grid.Row="2">
    <TextBlock Text="Text Three" Height="Auto"/>
  </Viewbox>

4 个答案:

答案 0 :(得分:2)

您应该查看 ListBox (或DataGrid)

这是Scott GU的一个很好的Silverlight教程:

http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-5-using-the-listbox-and-databinding-to-display-list-data.aspx

答案 1 :(得分:1)

您想在XAML文件中使用网格。这是一个例子: 一旦你有网格定义,你可以轻松地删除列和行,就像上一篇文章所说的那样。将对齐设置为Stretch将允许Grid使用浏览器调整大小。

<Grid x:Name="grdName"HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >

                         

我发现有一点难以弄清楚的是如何更改行或列并将其设置为自动宽度。这是一个例子。

Dim objCol As ColumnDefinition = Nothing

objCol = grdName.ColumnDefinitions.Item(0) objCol.Width = New GridLength(Double.NaN)

如果要将宽度设置为任何其他值,只需将数字放在Double.NaN的位置。

哦,所有代码都是VB.net。

答案 2 :(得分:1)

首先想到的问题是你何时添加行。这纯粹是设计时间吗?还是运行时要求?

<Grid x:Name="ExampleGrid" Height="20" Width="200">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <TextBlock Text="Text One" Height="Auto" Grid.Row="0"/>
    <TextBlock Text="Text Two" Height="Auto" Grid.Row="1"/>
    <TextBlock Text="Text Three" Height="Auto" Grid.Row="2"/>
</Grid>

这将创建一个三行网格。每个网格获得相同的可用空间份额。 (高度中的星形意味着分割可用空间)

如果要在运行时添加一行。

ExampleGrid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(1, GridUnitType.Star) });

TextBlock block = new TextBlock() { Text = "Text Four" };
Grid.SetRow(block, 3);

ExampleGrid.Children.Add(block);

问题在于让文本本身向上或向下扩展以适应可用空间,我不知道该怎么做。

答案 3 :(得分:0)

我自己对XAML很新,但我很确定你不需要在XAML本身做任何事情,而是在代码中做任何事情。 XAML被编译为BAML(二进制),您的代码使用BAML中定义的.NET对象,XAML本身只是一种人类可读的设计时语言。

您可能会在程序上添加行定义,这将是以下内容:

Grid g = this.Grid1
g.RowDefinitions.Add(new RowDefinition)

当然,您可以循环以继续将RowDefinition添加到RowDefinitions集合,并在将RowDefinition添加到网格之前或之后在RowDefinition上设置其他属性