为什么即使我使用完全相同的XAML,ListView.HeaderTemplate和ListView.ItemTemplate(UWP XAML)的显示方式也不同?

为什么即使我使用完全相同的XAML,ListView.HeaderTemplate和ListView.ItemTemplate(UWP XAML)的显示方式也不同?,xaml,listview,uwp,Xaml,Listview,Uwp,我的表单上有一个ListView,我正在设置ListView.HeaderTemplate,它看起来就像我期望的那样 但是,如果我将确切的网格定义复制到ListView.ItemTemplate中,它的布局将不相同 更改了两种列值颜色(青色和绿色) 我已经改变了两个项目列值的颜色,以便您可以区分每个项目的显示位置。我定义了两个值,因此数据将显示在VisualStudio的预览布局中,但当它运行时,这两个布局看起来仍然不同,即使它们定义相同 没有网格。在ItemTemplate文本块上定义了行

我的表单上有一个ListView,我正在设置ListView.HeaderTemplate,它看起来就像我期望的那样

但是,如果我将确切的网格定义复制到ListView.ItemTemplate中,它的布局将不相同

更改了两种列值颜色(青色和绿色)

我已经改变了两个项目列值的颜色,以便您可以区分每个项目的显示位置。我定义了两个
值,因此数据将显示在VisualStudio的预览布局中,但当它运行时,这两个布局看起来仍然不同,即使它们定义相同

没有网格。在ItemTemplate文本块上定义了行

在XAML中您会注意到的一个区别是ItemTemplate TextBlocks每个都只有其Grid.Column集(没有Grid.Row集)。这是一个测试,看起来都一样

逐字复制/粘贴HeaderTemplate到ItemTemplate

我将HeaderTemplate复制到ItemTemplate,只做了上面提到的更改

为什么它们的布局不一样?

<ListView.HeaderTemplate>
   <DataTemplate>
      <Grid>
         <Grid.RowDefinitions>
            <RowDefinition Height="*" />
         </Grid.RowDefinitions>
         <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
         </Grid.ColumnDefinitions>
         <TextBlock Margin="7 0 0 0" Grid.Row="0" Grid.Column="0" Foreground="#ff0000" Text="Date"  />
         <TextBlock Margin="0 0 15 0" Grid.Row="0" Grid.Column="1" Foreground="#ff0000" Text="Entry Count" />
      </Grid>
   </DataTemplate>
</ListView.HeaderTemplate>

编辑

如果我将ItemTemplate ColumnDefinitions更改为如下所示:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="200" />
    <ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

然后它确实更接近我的期望,但我仍然不确定为什么我必须以不同的方式来做


默认情况下,
ListViewItem
不会拉伸其内容。在
ItemContainerStyle
中将
HorizontalContentAlignment
设置为
Stretch

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

方法1非常有效。您从哪里了解到ItemContainerStyle?如果你没有给我看,我永远也不会发现。非常感谢。XAML/UWP中似乎有很多未记录的(或很少记录的)。顺便说一句,方法2并不能解决问题。我试过了。@raddevus是
ItemsControl
的一部分。此外,我认为,删除我的免责声明是安全的。