带表头的表
本文关键字:表头 | 更新日期: 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