Windows 8 - XAML - 将网格置于ListView中

时间:2013-01-07 01:29:06

标签: c# xaml windows-8 windows-store-apps

在我的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中指定的三列。

我做错了什么?

4 个答案:

答案 0 :(得分:12)

我认为问题是ItemContainerStyle需要HorizontalContentAlignment Stretch。尝试将此添加到ListView:

<ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListView.ItemContainerStyle>

答案 1 :(得分:0)

ListBox和Grid都应该有Horizo​​ntalContentAlignment =&#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>