中心在最后一行对齐GridView项目

时间:2017-09-29 13:04:48

标签: c# gridview uwp winrt-xaml uwp-xaml

我想实现一个连续3个项目的GridView,如果最后一行中的项目数为2,那么最后一行项目应该对齐居中而不是左对齐。这里有几张图片来解释我想要实现的目标。

目前我的实现看起来像

this

这就是我想要实现的目标。

this

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

有很多方法可以实现您提到的功能。

总结一下,您需要继承GridView并覆盖MeasureOverride ArrangeOverride方法,以重新计算Panel的每个Rect子女。这种方式很复杂。有关更多信息,请参阅 XAML custom panels overview

您还可以使用PrepareContainerForItemOverride方法直接重新布置项目。

<local:VariableGrid 
           x:Name="MyGridView" 
           SelectionMode="Single"       
         IsSwipeEnabled="False">
    <local:VariableGrid.ItemTemplate >
        <DataTemplate>
            <StackPanel BorderBrush="Red" BorderThickness="3" Height="200" Width="200" Margin="20">
            </StackPanel>
        </DataTemplate>
    </local:VariableGrid.ItemTemplate>
    <local:VariableGrid.ItemsPanel>
        <ItemsPanelTemplate>
            <VariableSizedWrapGrid 
                Orientation="Horizontal"
                VerticalAlignment="Top"
                ScrollViewer.HorizontalScrollMode="Enabled"
                ScrollViewer.VerticalScrollMode="Disabled"
                MaximumRowsOrColumns="4">
            </VariableSizedWrapGrid>
        </ItemsPanelTemplate>
    </local:VariableGrid.ItemsPanel>
</local:VariableGrid>

<强> VariableGrid.cs

public sealed class VariableGrid : GridView
{
    public VariableGrid()
    {
        this.DefaultStyleKey = typeof(VariableGrid);
    }
    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        var list = this.ItemsSource as List<string>;      
        var griditem = element as GridViewItem;          
        for (var t = ((list.Count - list.Count % 4)); t < list.Count; t++)
        {
            if (item as string == list[t])
            {
                if (griditem != null)
                {
                    VariableSizedWrapGrid.SetColumnSpan(griditem, 2);
                }
            }
        }
        base.PrepareContainerForItemOverride(element, item);
    }
}

enter image description here

但是,这种简单的方法无法适应所有情况。