1
我想要實現一個GridView,它將一行中的3個項目,並且如果最後一行中的項目數量是2,那麼最後一行項目應該對齊中心而不是左對齊,對齊。這裏有幾張圖片來解釋我想實現的目標。中心對齊最後一行中的GridView項目
目前我的實現看起來像
。
這就是我想要實現的。
任何幫助,將不勝感激。
我想要實現一個GridView,它將一行中的3個項目,並且如果最後一行中的項目數量是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)是代碼示例。 –