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)는 코드 샘플입니다. –