1

我想在 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,并循环遍历每个对象以插入属性

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

4

2 回答 2

1

为了避免遍历你应该使用的数据行ItemsControl(或者ListView如果你需要选择行的概念)。不幸的是,在 WinRT ColumnDefinition中不包含SharedSizeGroup属性,该属性允许您使用GridinItemTemplate并在项目之间共享列大小,如此处所示

作为替代方案,您可以使用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; }
}

缺点是灵活性较低,因为在标题和行模板中需要相同的固定宽度。不过,我认为它应该就足够了——你真的不想开始在代码中创建 UIElements。

于 2013-01-06T08:29:03.807 回答
0

您想在网格内显示数据吗?网格通常用于排列控件。如果要在其中显示数据以及标题,则可能需要使用 DataGrid。

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

于 2013-01-05T23:30:19.570 回答