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

时间:2017-12-12 14:34:20

标签: xaml listview uwp

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

但是,如果我将确切的网格定义复制到我的ListView.ItemTemplate中,它的布局就不一样了。

items spaced differently

改变两列值颜色(青色和绿色)

我更改了两个Item列值的颜色,以便您可以区分每个值的显示位置。我定义了两个<x:String>值,因此数据将显示在Visual Studio的预览布局中,但是当它运行时,两个布局仍然看起来不同,即使它们的定义相同。

没有Grid.Row定义在ItemTemplate TextBlocks

您在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>

然后它确实接近我的期望,但我仍然不确定为什么我必须这样做。

better layout

1 个答案:

答案 0 :(得分:1)

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

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