Xaml 根据UWP中屏幕大小的Gridview项目动态宽度

Xaml 根据UWP中屏幕大小的Gridview项目动态宽度,xaml,gridview,uwp,windows-10,visualstatemanager,Xaml,Gridview,Uwp,Windows 10,Visualstatemanager,我创建了一个GridView,它通过数据绑定获取数据。我接下来要做的是根据屏幕大小使GridView项目宽度动态变化(就像他们在Windows 10新闻、体育应用程序等中所做的那样。),到目前为止,我已经使用visual state manager成功地将水平对齐设置为“拉伸”,从而使最小窗口宽度为0,但对于其他更宽的窗户尺寸,我无法继续这样做 如果您希望项目拉伸以填充水平空间,并且能够指定每行需要多少项目,则必须在GridView的SizeChanged事件中手动设置ItemsRapGrid的

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


如果您希望项目拉伸以填充水平空间,并且能够指定每行需要多少项目,则必须在GridView的SizeChanged事件中手动设置ItemsRapGrid的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>


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

如果希望项目拉伸以填充水平空间,并且能够指定每行需要多少项目,则必须在GridView的SizeChanged事件中手动设置ItemsRapGrid的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>


您也可以将其捆绑到行为或附加属性中。

您熟悉视觉状态的自适应触发器吗?到目前为止,您到底尝试了什么?哪些不适合您?是的,我使用了视觉状态自适应触发器将minWindowWidth设置为800。我使用了相同的setter属性将项目MinWidth设置为300,这是有效的。但我想做的是根据我们应用程序的窗口大小,从窗口宽度800开始,动态地改变项目的宽度。我面临的基本问题是,由于我在setter属性中定义宽度,它不再是动态的。如何解决此问题??您熟悉视觉状态的自适应触发器吗?到目前为止,您到底尝试了什么?哪些不适合您?是的,我使用了视觉状态自适应触发器将minWindowWidth设置为800。我使用了相同的setter属性将项目MinWidth设置为300,这是有效的。但我想做的是根据我们应用程序的窗口大小,从窗口宽度800开始,动态地改变项目的宽度。我面临的基本问题是,由于我在setter属性中定义宽度,它不再是动态的。我该如何解决这个问题?哦,天哪,这太漂亮了!!正是我想要的。。虽然还存在一个小问题:(:(我的gridview包含在绑定到数据的pivot控件中。因此,我无法从隐藏的代码中访问gridview。使用可视化树是解决此问题的唯一方法吗?您需要通过其他方式获得对gridview的引用。看,Oohh man,这很漂亮!!正是我想要的..尽管有点专业问题仍然存在:(:(我的gridview包含在绑定到数据的pivot控件中。因此,我无法从后面的代码访问gridview。使用可视化树是解决此问题的唯一方法吗?您需要通过其他方式获取对gridview的引用。请参阅