在我的Windows 8商店的XAML / C#应用程序中,我正在尝试创建一个ListView,其中每个ListItem是一个水平网格,所以我使用下面的XAML:
<ListView Name="ResultsView">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="4*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding BestRank}" Grid.Column="0"/>
<TextBlock Text="{Binding PlayerName}" Grid.Column="1"/>
<TextBlock Text="{Binding BestScore}" Grid.Column="2"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
当我运行这个程序时,listview包含它所绑定的列表中的所有项目(通过代码隐藏)。但是,在每个列表项中,所有三列的内容一起显示,它们之间没有任何空格。当我在listview之外创建一个类似的网格时,它显示正常并占据屏幕的整个宽度,并将其划分为上面XAML中指定的三列。
我做错了什么?
答案 0 :(得分:12)
我认为问题是ItemContainerStyle
需要HorizontalContentAlignment
Stretch
。尝试将此添加到ListView:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
答案 1 :(得分:0)
ListBox和Grid都应该有HorizontalContentAlignment =&#34; Stretch&#34;
指定网格的宽度或将样式作为资源添加到网格中。在</Grid.ColumnDefinitions>
行之后添加此内容。
<Grid.Resources>
<Style TargetType="TextBlock">
<Setter Property="TextAlignment" Value="Right" />
<Setter Property="Margin" Value="4" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</Grid.Resources>
这会将属性设置为Grid中的所有TextBlock。您可能只需要Margin属性。还要考虑属性Width和Padding。您可以通过将任何给定TextBlock上的属性设置为不属于Style的默认值来覆盖此默认值。
答案 2 :(得分:0)
默认的ItemsPanelTemplate是一个堆栈面板,据我所知,它意味着它不会自动赋予它的子弹性行为。您将需要更改它,我将在我的手机上编辑,等待我的笔记本电脑启动:)
编辑:
呃不要忽视我在考虑ItemsControl
,JBrooks是对的,只需确保HorizontalContentAlignment
设置为Stretch
,默认为Left
。
<ListView Name="ResultsView" HorizontalContentAlignment="Stretch">
这应该可以正常工作 - 使用XXXXContentAlignment
的任何控件似乎默认为Left
我认为它与其他控件(例如Grid
)
答案 3 :(得分:0)
实际上这不是Listview的问题。问题是你把它放进去的地方?将列表视图放在网格中。它应该工作
<ListView Name="ResultsView"
HorizontalContentAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Background="Yellow">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="4*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding BestRank}" Grid.Column="0"/>
<TextBlock Text="{Binding PlayerName}" Grid.Column="1"/>
<TextBlock Text="{Binding BestScore}" Grid.Column="2"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>