在XAML中创建表并用数组填充它?

时间:2014-06-10 22:20:16

标签: arrays xaml windows-phone-8 grid auto-populate

如果我有一张如下表所示的表格:

 <Grid VerticalAlignment="Top" HorizontalAlignment="Left" ShowGridLines="True" Width="250" Height="100">
      <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>
      <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
      </Grid.RowDefinitions>

      <TextBlock FontSize="20" FontWeight="Bold" Grid.ColumnSpan="3" Grid.Row="0">2005 Products Shipped</TextBlock>
      <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="0">Quarter 1</TextBlock>
      <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="1">Quarter 2</TextBlock>
      <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="2">Quarter 3</TextBlock>
      <TextBlock Grid.Row="2" Grid.Column="0">50000</TextBlock>
      <TextBlock Grid.Row="2" Grid.Column="1">100000</TextBlock>
      <TextBlock Grid.Row="2" Grid.Column="2">150000</TextBlock>
      <TextBlock FontSize="16" FontWeight="Bold" Grid.ColumnSpan="3" Grid.Row="3">Total Units: 300000</TextBlock>
    </Grid>

我是否可以使用数组一次填充它。

例如,如果我有一个包含&#34;第1行&#34;,&#34;第2行&#34;通过10,我能用这些值填充第一列吗?

我不确定我在解释方面做得很好。我知道我可以单独完成每个细胞,但是我希望它能够循环并一次完成所有细胞吗?

由于

1 个答案:

答案 0 :(得分:2)

首先,考虑使用带有DataTemplate的ListBox或ItemsControl。在单独的网格中定义2个标题行,并在下面堆叠此标题行。这种方法的缺点是你需要定义固定宽度的列,因为每一行都是它自己的Grid(或者实际上StackPanel在这种情况下更有效):

<ItemsControl ItemsSource="{Binding TheArray}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Width="100" Text="{Binding Col1}" />
                <TextBlock Width="100" Text="{Binding Col2}" />
                <TextBlock Width="100" Text="{Binding Col3}" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

其次,如果您需要使用真正的网格,那么一种方法可能是在网格上定义一个行为。此Behavior类将定义Items依赖项属性。然后依赖项属性的“已更改”处理程序可以创建TextBlocks(x为每个单元格的x,其中x是列数),将它们添加到网格中,并分配Grid.RowGrid.Column属性(甚至在必要时添加RowDefinitions

<Grid>
    <i:Interaction.Behaviors>
        <my:GridItemsBehavior Items="{Binding TheArray}" />
    </i:Interaction.Behaviors>
</Grid>

我不一定会推荐后一种方法,因为你通过在代码隐藏中创建UI而失去了很多XAML的强大功能。