2017-09-29 9 views
1

3つのアイテムを連続して取得するGridViewを実装したい場合、最後の行のアイテム数が2である場合、最後の行アイテムは、整列した。ここで私が達成したいことを説明するための画像がいくつかあります。最後の行のGridViewアイテムの中央揃え

現在、私の実装では、

thisのように見えます。

これが私が達成したいことです。

this

任意の助けいただければ幸いです。

答えて

0

あなたが言及した機能を実現する方法はたくさんあります。

要約すると、GridViewを継承し、MeasureOverrideArrangeOverrideメソッドをオーバーライドして、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

しかし、この単純な方法は、すべてのシナリオにフィットすることはできません。

+0

ありがとうございました。この実行例で使用したコードを教えてください。 – aadilp

+0

はい、[this](https://github.com/ZhuMingHao/GridViewFlowTest.git)はコードサンプルです。 –

関連する問題