3 개의 항목을 연속으로 사용하는 GridView를 구현하고 마지막 행의 항목 수가 2 인 경우 마지막 행 항목이 왼쪽으로 정렬되지 않고 중앙에 정렬되어야합니다. 정렬. 다음은 내가 달성하고 싶은 것을 설명하는 몇 가지 이미지입니다.마지막 행의 GridView 항목 정렬 중심
현재 내 구현
것 같습니다.
그리고 이것이 내가 달성하기를 원하는 것입니다.
어떤 도움
주시면 감사하겠습니다.3 개의 항목을 연속으로 사용하는 GridView를 구현하고 마지막 행의 항목 수가 2 인 경우 마지막 행 항목이 왼쪽으로 정렬되지 않고 중앙에 정렬되어야합니다. 정렬. 다음은 내가 달성하고 싶은 것을 설명하는 몇 가지 이미지입니다.마지막 행의 GridView 항목 정렬 중심
현재 내 구현
것 같습니다.
그리고 이것이 내가 달성하기를 원하는 것입니다.
어떤 도움
주시면 감사하겠습니다.언급 한 기능을 구현하는 데는 여러 가지 방법이 있습니다.
요약하면, 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);
}
}
그러나이 간단한 방법은 모든 시나리오에 맞지 않을 수 있습니다.
감사합니다. 실행중인 예제에서 사용한 코드를 제공해 주시겠습니까? – aadilp
예, [this] (https://github.com/ZhuMingHao/GridViewFlowTest.git)는 코드 샘플입니다. –