Il existe de nombreuses façons de réaliser la fonctionnalité que vous avez mentionnée.
Pour résumer, vous avez besoin d'hériter GridView
et passer outre MeasureOverride
ArrangeOverride
méthode pour recalculer chaque Rect
des enfants du Groupe spécial. Cette voie est complexe. Pour plus d'informations, vous pouvez vous référer à XAML custom panels overview.
Et vous pouvez également utiliser la méthode PrepareContainerForItemOverride
pour redimensionner l'élément directement.
<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);
}
}
Cependant, cette façon simple ne peut tout le scénario.
Merci. Pouvez-vous s'il vous plaît fournir le code que vous avez utilisé dans cet exemple? – aadilp
Oui, [this] (https://github.com/ZhuMingHao/GridViewFlowTest.git) est un exemple de code. –