我想在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,并循环遍历每个对象以插入属性
我可以以任何方式这样做,还是应该使用网格创建它?
答案 0 :(得分:1)
为避免必须遍历数据行,您应该使用ItemsControl
(或ListView
,如果您需要所选行的概念)。不幸的是,在WinRT ColumnDefinition中不包含SharedSizeGroup属性,允许您在Grid
中使用ItemTemplate
并在项目之间共享列大小here
作为替代方案,您可以使用具有固定控件宽度的水平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。
答案 1 :(得分:0)
您想在网格内显示数据吗? 网格通常用于安排控件。如果要在其中显示数据以及标题,则可能需要使用DataGrid。