C# Windows8-XAML-将网格放入ListView
在适用于Windows 8应用商店的XAML/C#应用程序中,我试图创建一个列表视图,其中每个列表项都是一个水平网格,因此我使用下面的XAML:C# Windows8-XAML-将网格放入ListView,c#,xaml,windows-8,windows-store-apps,C#,Xaml,Windows 8,Windows Store Apps,在适用于Windows 8应用商店的XAML/C#应用程序中,我试图创建一个列表视图,其中每个列表项都是一个水平网格,因此我使用下面的XAML: <ListView Name="ResultsView"> <ListView.ItemTemplate> <DataTemplate> <Grid> <Grid.ColumnDefinitions> <
<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中的指定将其划分为三列
我做错了什么 列表框和网格都应具有HorizontalContentAlignment=“Stretch” 指定网格的宽度或将样式作为资源添加到网格中。在
行之后添加此项
<Grid.Resources>
<Style TargetType="TextBlock">
<Setter Property="TextAlignment" Value="Right" />
<Setter Property="Margin" Value="4" />
<Setter Property="VerticalAlignment" Value="Center" />
</Style>
</Grid.Resources>
这将为网格中的所有文本块设置属性。您可能只需要Margin属性。还考虑属性宽度和填充。您可以通过将任何给定TextBlock上的属性设置为样式中的非默认值来覆盖此默认值。据我所知,默认ItemsPanelTemplate是堆栈面板,这意味着它不会自动提供其子级拉伸行为。您需要更改它,我将在手机上编辑,等待笔记本电脑启动:) 编辑: 呃,不要忽略我想到的
ItemsControl
,JBrooks是正确的,只要确保HorizontalContentAlignment
设置为Stretch
,因为默认设置为Left
<ListView Name="ResultsView" HorizontalContentAlignment="Stretch">
这应该可以正常工作-任何使用
XXXXContentAlignment
的控件似乎默认为Left
,我认为这与其他控件(例如Grid
)有点不一致。实际上这不是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>
我认为问题在于
ItemContainerStyle
需要横向内容对齐
的拉伸
。尝试以下操作将其添加到ListView:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
但这仍然不符合我在columndefinitions中指定的宽度。我希望我的网格能够覆盖整个屏幕宽度,这样应该可以很好地工作——假设您的DataTemplate是正常的,那么您不需要更改任何样式。我已将您的XAML粘贴到VS2010中,然后设置了HorizontalContentAlignment
,对我来说效果很好,我正在尝试使用Windows 8应用商店应用程序。你在为WPF试一试吗?VS2010不支持Windows 8应用商店应用。@有时开发者不,我在做Silverlight,这类东西“应该”是相同的。看起来它不是相同的,它已经在网格中了。它是多行网格中的一行。能否确保列表视图占用了全部空间?可能是给一些背景颜色,你可以检查一下..是的,我验证过了。列表视图确实占据了整个空间您确定这是针对Windows 8应用商店应用程序的吗?我收到以下错误:XamlCompiler错误WMC0011:元素“RelativeSource”上的未知成员“AncestorType”,我想对于windows 8应用商店应用程序,listview的内容必须使用非拉伸主机…我认为它在SL/WPF/Win8中是一致的