raddevus Ответов: 1

Почему listview.headertemplate и listview.itemtemplate (UWP XAML) отображаются по-разному, даже если я использую один и тот же XAML?


У меня есть ListView в моей форме, и я настраиваю ListView.HeaderTemplate и это выглядит так, как я ожидаю, что это будет выглядеть.

Однако, если я скопирую точное определение сетки в свой ListView.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>


То на следующем рисунке показано, как это выглядит в Visual Studio 2017:
https://i.stack.imgur.com/xgU9P.png[^]

Вы можете видеть, что даже если HeaderTemplate и ItemTemplate определены одинаково, они располагаются по-разному.

Изменены два цвета значений столбцов (голубой и зеленый)

Я изменил цвет двух значений столбцов элементов, чтобы вы могли различать, где каждый из них отображается. У меня есть два значения <x:String>, определенные таким образом, что данные будут отображаться в макете предварительного просмотра Visual Studio, но когда он запускается, эти два макета все еще выглядят по-разному, даже если они определены одинаково.

Никакой Сетки.Строк, Определенными На Свойства Itemtemplate Элементов TextBlock

Единственное отличие, которое вы заметите в XAML, заключается в том, что текстовые блоки ItemTemplate имеют только свою сетку.Набор столбцов (без сетки.Набор рядов). Это был тест, и он выглядит одинаково в любом случае.

Буквально скопируйте / вставьте HeaderTemplate в ItemTemplate

Я буквально скопировал HeaderTemplate в ItemTemplate и внес только упомянутые изменения.

Почему они не делают то же самое?

Что я уже пробовал:

Я изменил определения столбцов ItemTemplate, чтобы они выглядели следующим образом:

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


Это сделало его гораздо ближе к HeaderTemplate (как вы можете видеть на следующем изображении).
Но я все еще не уверен, почему они отображаются по-разному.
https://i.stack.imgur.com/GSMaE.png[^]

1 Ответов

Рейтинг:
6

raddevus

По-видимому, ListItems не будет растягиваться, чтобы заполнить пробел, но элемент заголовка будет.
Чтобы устранить эту проблему, вы должны добавить в свой ListView следующее

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


Затем вы можете изменить сетку.ColumnDefinitions вернуться к

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


Как только вы это сделаете, элементы будут растянуты так же, как и элементы заголовка.
Конечный результат изображение которое выглядит правильно[^]