GridView ItemTemplate полная ширина

Мой вопрос: как я могу растянуть DataTemplate на всю ширину экрана. Я перепробовал много решений, но они не работают. я пробовал HorizontalContentAlignment, настройка GridView.ItemContainerStyle и т. д. Но ничего не работает. Кто-нибудь может объяснить мне, как я могу это сделать?

Вот часть моего кода:

<Grid Style="{StaticResource GeneralAppBackground}">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Pivot x:Name="AccountInfoOptions" Grid.Row="1">
        <PivotItem Header="История">
            <GridView ItemsSource="{x:Bind CheckoutList}" Margin="5,0,5,0">
                <GridView.ItemTemplate>
                    <DataTemplate x:DataType="data:UserCheckout">
                        <StackPanel Orientation="Horizontal" BorderBrush="Transparent" Background="White" Padding="5" Margin="0,5,0,0">
                            <StackPanel Grid.Column="0" Orientation="Vertical" VerticalAlignment="Center" Margin="0,0,10,0">
                                <TextBlock FontSize="14" Text="{x:Bind CheckoutDate}" Foreground="#979797" />
                                <TextBlock FontSize="14" Text="{x:Bind CheckoutTime}" Foreground="#979797" />
                            </StackPanel>
                            <StackPanel Grid.Column="1" VerticalAlignment="Center">
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{x:Bind CheckoutSum}" FontSize="22" FontWeight="Bold" />
                                    <Image Source="/Assets/TengeIcon.png" Width="20" Margin="5,0,0,0"/>
                                </StackPanel>
                                <TextBlock Text="{x:Bind CheckoutTitle}" TextAlignment="Center" />
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </GridView.ItemTemplate>

                <GridView.ItemContainerStyle>
                    <Style TargetType="GridViewItem">
                        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
                    </Style>
                </GridView.ItemContainerStyle>
            </GridView>
        </PivotItem>
   </Pivot>

1 ответ

Решение

Ключом к тому, чтобы заставить его работать, является изменение ItemsPanelTemplate, Определите его как ресурс страницы:

<Page.Resources>
    <ItemsPanelTemplate x:Key="ItemsPanelTemplate">
        <ItemsStackPanel />
    </ItemsPanelTemplate>
</Page.Resources>

Теперь установите его как ItemsPanel для тебя GridView:

<GridView ItemsSource="{x:Bind CheckoutList}" 
          Margin="5,0,5,0" 
          ItemsPanel="{StaticResource ResourceKey=ItemsPanelTemplate}">

Это позволит отдельным элементам растягиваться по всей ширине. Вам все равно нужно будет заменить рут StackPanel в вашем DataTemplate с Grid как предложил Никита:

<DataTemplate x:DataType="local:UserCheckout">
    <Grid BorderBrush="Transparent" Background="White" Padding="5" Margin="0,5,0,0">
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <StackPanel Grid.Column="0" Orientation="Vertical" VerticalAlignment="Center" Margin="0,0,10,0">
            <TextBlock FontSize="14" Text="{x:Bind CheckoutDate}" Foreground="#979797" />
            <TextBlock FontSize="14" Text="{x:Bind CheckoutTime}" Foreground="#979797" />
        </StackPanel>
        <StackPanel Grid.Column="1" VerticalAlignment="Center">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{x:Bind CheckoutSum}" FontSize="22" FontWeight="Bold" />
                <Image Source="/Assets/TengeIcon.png" Width="20" Margin="5,0,0,0"/>
            </StackPanel>
            <TextBlock Text="{x:Bind CheckoutTitle}" TextAlignment="Center" />
        </StackPanel>
    </Grid>
</DataTemplate>

У вас уже есть Grid.Column свойство установлено правильно для внутреннего StackPanels. Кажется, вы пытались использовать Grid там до.

Другие вопросы по тегам