如果我有一张如下表所示的表格:
<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,我能用这些值填充第一列吗?
我不确定我在解释方面做得很好。我知道我可以单独完成每个细胞,但是我希望它能够循环并一次完成所有细胞吗?
由于
答案 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.Row
和Grid.Column
属性(甚至在必要时添加RowDefinitions
。
<Grid>
<i:Interaction.Behaviors>
<my:GridItemsBehavior Items="{Binding TheArray}" />
</i:Interaction.Behaviors>
</Grid>
我不一定会推荐后一种方法,因为你通过在代码隐藏中创建UI而失去了很多XAML的强大功能。