1

如果我有一张如下表:

 <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>

我可以使用数组一次性填充它吗?

例如,如果我有一个包含“第 1 行”、“第 2 行”等到 10 的数组,我可以用这些值填充第一列吗?

我不确定我在解释方面做得很好。我知道我可以单独完成每个单元格,但我希望它循环并一次完成?

谢谢

4

1 回答 1

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 是列数),将它们添加到 Grid,并分配Grid.RowandGrid.Column属性(甚至在RowDefinitions必要时添加)。

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

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

于 2014-06-10T22:31:07.317 回答