【问题标题】:Windows 8 - XAML - Putting Grid Inside ListViewWindows 8 - XAML - 将网格放入 ListView
【发布时间】:2013-01-07 01:29:05
【问题描述】:

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

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    我认为问题在于ItemContainerStyle 需要有HorizontalContentAlignmentStretch。尝试将此添加到 ListView:

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

    【讨论】:

      【解决方案2】:

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

      指定网格的宽度或将样式作为资源添加到网格。在您的 &lt;/Grid.ColumnDefinitions&gt; 行之后添加它。

       <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 的默认值来覆盖此默认值。

      【讨论】:

      • 但这仍然不尊重我在列定义中指定的宽度。我希望我的网格跨越屏幕的整个宽度
      • 这应该可以正常工作 - 假设您的 DataTemplate 没问题(确实如此),您不需要更改任何样式。我已将您的 XAML 粘贴到 VS2010 中,然后设置 HorizontalContentAlignment,它对我来说很好
      • 我正在尝试使用 Windows 8 应用商店应用程序。你在为 WPF 尝试它吗? VS2010 不支持 Windows 8 应用商店应用。
      • @SometimesADeveloper 不,我在做 Silverlight,这种东西“应该”一样。
      • 看起来不一样
      【解决方案3】:

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

      编辑:

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

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

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

      【讨论】:

        【解决方案4】:

        其实这不是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>
        

        【讨论】:

        • 它已经在网格中。它是多行网格中的行之一
        • 你能确保你的列表视图占据了全部空间吗?可能通过给一些背景颜色你可以检查它..
        • 是的,我验证了这一点。列表视图确实占据了整个空间
        • 您确定这适用于 Windows 8 应用商店应用程序吗?我收到此错误:XamlCompiler error WMC0011: Unknown member 'AncestorType' on element 'RelativeSource'
        • 我想对于 Windows 8 商店应用程序,列表视图必须使用非拉伸主机的内容...我认为它在 SL/WPF/Win8 中是一致的
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-23
        • 2013-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多