4

在我的 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>

当我运行这个程序时,列表视图包含它绑定到的列表中的所有项目(通过后面的代码)。然而,在每个列表项中,所有三列的内容都出现在一起,它们之间没有任何空格。当我在列表视图之外创建一个类似的网格时,它显示良好并占据屏幕的整个宽度,并将其划分为上面 XAML 中指定的三列。

我究竟做错了什么?

4

4 回答 4

12

我相信问题是ItemContainerStyle需要有一个HorizontalContentAlignment. Stretch尝试将此添加到 ListView:

<ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </ListView.ItemContainerStyle>
于 2013-01-07T03:30:00.467 回答
0

据我回忆,默认的 ItemsPanelTemplate 是一个堆栈面板,这意味着它不会自动给它的孩子拉伸行为。您将需要更改它,我将在我的手机上等待我的笔记本电脑启动 :)

编辑:

呃不要忽略我在想的ItemsControl,JBrooks是对的,只要确保HorizontalContentAlignment设置Stretch为默认为Left

<ListView Name="ResultsView" HorizontalContentAlignment="Stretch">

这应该可以正常工作 - 任何使用的控件XXXXContentAlignment似乎都默认使用Left,我认为它与其他控件(例如Grid)有点不一致

于 2013-01-07T02:29:20.397 回答
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>
于 2013-01-07T02:41:39.083 回答
0

ListBox 和 Grid 都应该有 Horizo​​ntalContentAlignment="Stretch"

指定网格的宽度或将样式作为资源添加到网格。</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>

这会将属性设置为网格中的所有文本块。您可能只需要 Margin 属性。还要考虑属性 Width 和 Padding。您可以通过将任何给定 TextBlock 上的属性设置为不是 Style 的默认值来覆盖此默认值。

于 2013-01-07T02:15:06.143 回答