首页 文章

GridView ItemTemplate全宽

提问于
浏览
0

我的问题是:如何将DataTemplate拉伸到屏幕的整个宽度 . 我've tried many solutions but they does not work. I'已经尝试 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 回答

  • 3

    使其发挥作用的关键是改变 ItemsPanelTemplate . 将其定义为页面资源:

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

    现在将其设置为 GridViewGridView

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

    这将允许单个物品在整个宽度上伸展 . 您仍然需要使用 Grid 替换 DataTemplate 中的根 StackPanel ,如Nikita建议的那样:

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

    您已经为内部 StackPanel 正确设置了 Grid.Column 属性 . 看来你之前试图使用 Grid .

相关问题