Windows 填充GridView的空间

Windows 填充GridView的空间,windows,xaml,windows-runtime,winrt-xaml,windows-phone-8.1,Windows,Xaml,Windows Runtime,Winrt Xaml,Windows Phone 8.1,我想用图像填充GridView控件中的可用空间。具体来说,我想做4列,每列有一个图像。列之间没有空格 第一个想法:GridView填充了页面中的所有可用空间,因此我只需要一个转换器,它绑定到GridView的ActualWidth属性,然后将其除以四(列)。这应该给我四列相同的宽度。问题是,不幸的是,宽度不是一个简单的数字,除以4可能会得到一个不完美的数字,因此4列宽度之和可以遍历网格,结果是我只能看到3列,而不是4列。即使我将边距和填充设置为零,结果也不会改变。代码如下: <GridVi

我想用图像填充GridView控件中的可用空间。具体来说,我想做4列,每列有一个图像。列之间没有空格

第一个想法:GridView填充了页面中的所有可用空间,因此我只需要一个转换器,它绑定到GridView的ActualWidth属性,然后将其除以四(列)。这应该给我四列相同的宽度。问题是,不幸的是,宽度不是一个简单的数字,除以4可能会得到一个不完美的数字,因此4列宽度之和可以遍历网格,结果是我只能看到3列,而不是4列。即使我将边距和填充设置为零,结果也不会改变。代码如下:

<GridView x:Name="Photos">
        <GridView.ItemTemplate>
            <DataTemplate>
                <Image Source="{Binding Url}" 
                       Width="{Binding ElementName=Photos, Path=ActualWidth, Converter={StaticResource DivideByFourConverter}}"
                       Height="{Binding ElementName=Photos, Path=ActualWidth, Converter={StaticResource DivideByFourConverter}}
                       Stretch="UniformToFill" />
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>


您不应该绑定到
ActualWidth
属性。提到:

出于ElementName绑定的目的,ActualWidth在更改时不会发布更新(由于其异步和运行时计算的性质)。不要尝试将ActualWidth用作ElementName绑定的绑定源。如果您有需要基于实际宽度进行更新的场景,请使用SizeChanged处理程序

我设法让它像这样工作:


试验
试验
试验
试验
试验
试验
试验
试验
试验
试验
试验
试验
然后在后面的代码中:

private void GridView\u SizeChanged(对象发送方,sizechangedventargs e)
{
变量面板=(ItemsWrapGrid)GridView.ItemsPanelRoot;
panel.ItemWidth=panel.ItemHeight=e.NewSize.Width/4;
}


它也适用于6英寸的emulator。

您不应该绑定到
ActualWidth
属性。请注意:

出于ElementName绑定的目的,ActualWidth在更改时不会发布更新(由于其异步和运行时计算的性质)。不要尝试将ActualWidth用作ElementName绑定的绑定源。如果您有需要基于ActualWidth进行更新的场景,请使用SizeChanged处理程序

我设法让它像这样工作:


试验
试验
试验
试验
试验
试验
试验
试验
试验
试验
试验
试验
然后在后面的代码中:

private void GridView\u SizeChanged(对象发送方,sizechangedventargs e)
{
变量面板=(ItemsWrapGrid)GridView.ItemsPanelRoot;
panel.ItemWidth=panel.ItemHeight=e.NewSize.Width/4;
}


它也适用于6英寸模拟器。

您是否尝试过将GridView的边距稍微增加几个像素?类似于
Margin=“0,0,-4,0”
。我不知道它是否管用,试试看。这可以管用,但大小不一。例如:WVGA屏幕不是720p屏幕,我们可以在其中设置更多的边距。您是否尝试过将GridView的边距稍微增加几个像素?类似于
Margin=“0,0,-4,0”
。我不知道它是否管用,试试看。这可以管用,但大小不一。例如:WVGA屏幕不是720p屏幕,在这里我们可以设置更多的marginOh、文档。。。对,我把那块完全弄丢了!非常感谢,很有效!!:)哦,文档。。。对,我把那块完全弄丢了!非常感谢,很有效!!:)
<GridView x:Name="Photos">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsWrapGrid MaximumRowsOrColumns="4"
                               Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.ItemTemplate>
            <DataTemplate>
                <Image Source="{Binding Url}" 
                       Stretch="UniformToFill" />
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>