根据UWP中的屏幕尺寸的Gridview项目动态宽度

Mon*_*ott 0 xaml gridview visualstatemanager windows-10 uwp

我创建了一个GridView通过数据绑定获取数据。我接下来要做的是根据屏幕大小使GridView项目的宽度动态变化(就像他们在Windows 10新闻,体育应用程序等中所做的那样)。到目前为止,我已经成功使用最小窗口宽度0做到了视觉状态管理器,方法是将水平对齐方式设置为拉伸,但是对于其他更大的窗口尺寸,我将无法继续进行。

任何用于解决此问题的帮助将不胜感激。

Dec*_*oon 5

如果要使项目拉伸以填充水平空间能够指定所需的每行多少个项目,则必须在GridView的SizeChanged事件中手动设置ItemsWrapGrid的ItemWidth。

这是一个例子:

<GridView x:Name="gridView" SizeChanged="onGridViewSizeChanged">
    <GridView.ItemTemplate>
        <DataTemplate>
            <Grid Background="GreenYellow" BorderBrush="Black" BorderThickness="2">
                <TextBlock Text="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="40"/>
            </Grid>
        </DataTemplate>
    </GridView.ItemTemplate>

    <GridView.ItemContainerStyle>
        <Style TargetType="GridViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="VerticalContentAlignment" Value="Stretch"/>
            <Setter Property="Margin" Value="0"/>
        </Style>
    </GridView.ItemContainerStyle>

    <GridView.ItemsPanel>
        <ItemsPanelTemplate>
            <ItemsWrapGrid Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </GridView.ItemsPanel>

    <x:String>1</x:String>
    <x:String>2</x:String>
    <x:String>3</x:String>
    <x:String>4</x:String>
    <x:String>5</x:String>
    <x:String>6</x:String>
    <x:String>7</x:String>
    <x:String>8</x:String>
</GridView>
Run Code Online (Sandbox Code Playgroud)
private void onGridViewSizeChanged(object sender, SizeChangedEventArgs e)
{
    // Here I'm calculating the number of columns I want based on
    // the width of the page
    var columns = Math.Ceiling(ActualWidth / 300);
    ((ItemsWrapGrid)gridView.ItemsPanelRoot).ItemWidth = e.NewSize.Width / columns;
}
Run Code Online (Sandbox Code Playgroud)

屏幕截图

您可能也可以将其捆绑到Behavior或附加的属性中。