带表头的表

本文关键字:表头 | 更新日期: 2023-09-27 17:50:45

我想在Windows RT中创建一个标题为

的简单表

我在想类似

的事情
<Grid>
   <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
   </Grid.RowDefinitions>
   <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto"/>
      <ColumnDefinition Width="10" />
      <ColumnDefinition Width="Auto"/>
   </Grid.ColumnDefinitions>
   <TextBlock Grid.Row="0" Grid.Column="0" Text="Measurement" />
   <TextBlock Grid.Row="1" Grid.Column="2" Text="Value" />
</Grid>

但是我不想为每个对象创建RowDefinition,并循环遍历每个对象以插入属性

我可以以任何方式做到这一点,或者我应该使用网格创建它吗?

带表头的表

为了避免必须循环遍历数据行,您应该使用ItemsControl(或ListView,如果您需要选定行的概念)。不幸的是,在WinRT ColumnDefinition不包括SharedSizeGroup属性,这将允许您在ItemTemplate中使用Grid并在项目之间共享列大小,如这里所示。

作为替代方案,您可以使用具有固定控制宽度的水平StackPanel:

<StackPanel Orientation="Horizontal">
    <TextBlock Text="Measurement" Width="100" />
    <TextBlock Text="Value" Width="200" />
</StackPanel>
<ItemsControl ItemsSource="{Binding Measurements}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Measurement}" Width="100" />
                <TextBlock Text="{Binding Value}" Width="200" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

在上面的绑定中,我假设您的数据结构如下:

public class MeasurementItem
{
    public string Measurement { get; set; }
    public int Value { get; set; }
}
public class ViewModel
{
    public List<MeasurementItem> Measurements { get; set; }
}

缺点是灵活性较差,因为固定的宽度需要在标题和行模板中相同。尽管如此,我认为这应该足够了-你真的不想开始在代码中创建ui元素。

要在网格内显示数据吗?网格通常用于安排控件。如果你想在DataGrid中显示数据,你可能想使用DataGrid。

示例请查看http://wpftutorial.net/DataGrid.html