Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit 7b93f4c

Browse files
committed
Merge branch '4.4.0'
2 parents b62dbb4 + 3eeac7a commit 7b93f4c

File tree

2 files changed

+80
-15
lines changed

2 files changed

+80
-15
lines changed

Xamarin.Forms.Controls/GalleryPages/CollectionViewGalleries/CollectionViewGallery.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Xamarin.Forms.Controls.GalleryPages.CollectionViewGalleries.AlternateLayoutGalleries;
88
using Xamarin.Forms.Controls.GalleryPages.CollectionViewGalleries.HeaderFooterGalleries;
99
using Xamarin.Forms.Controls.GalleryPages.CollectionViewGalleries.ItemSizeGalleries;
10+
using Xamarin.Forms.Controls.GalleryPages.CollectionViewGalleries.SpacingGalleries;
1011

1112
namespace Xamarin.Forms.Controls.GalleryPages.CollectionViewGalleries
1213
{
@@ -30,6 +31,7 @@ public CollectionViewGallery()
3031
GalleryBuilder.NavButton("Selection Galleries", () => new SelectionGallery(), Navigation),
3132
GalleryBuilder.NavButton("Propagation Galleries", () => new PropagationGallery(), Navigation),
3233
GalleryBuilder.NavButton("Grouping Galleries", () => new GroupingGallery(), Navigation),
34+
GalleryBuilder.NavButton("Item Spacing Galleries", () => new ItemsSpacingGallery(), Navigation),
3335
GalleryBuilder.NavButton("Item Size Galleries", () => new ItemsSizeGallery(), Navigation),
3436
GalleryBuilder.NavButton("Scroll Mode Galleries", () => new ScrollModeGallery(), Navigation),
3537
GalleryBuilder.NavButton("Alternate Layout Galleries", () => new AlternateLayoutGallery(), Navigation),

Xamarin.Forms.Platform.UAP/CollectionView/StructuredItemsViewRenderer.cs

Lines changed: 78 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
using System.ComponentModel;
1+
using System;
2+
using System.ComponentModel;
23
using Windows.UI.Xaml.Controls;
34
using UWPApp = Windows.UI.Xaml.Application;
4-
using Xamarin.Forms.Platform.UAP;
5+
using WListView = Windows.UI.Xaml.Controls.ListView;
56
using WScrollMode = Windows.UI.Xaml.Controls.ScrollMode;
7+
using WSetter = Windows.UI.Xaml.Setter;
8+
using WStyle = Windows.UI.Xaml.Style;
9+
using WThickness = Windows.UI.Xaml.Thickness;
610

711
namespace Xamarin.Forms.Platform.UWP
812
{
@@ -47,13 +51,13 @@ protected override ListViewBase SelectListViewBase()
4751
{
4852
case GridItemsLayout gridItemsLayout:
4953
return CreateGridView(gridItemsLayout);
50-
case LinearItemsLayout listItemsLayout
51-
when listItemsLayout.Orientation == ItemsLayoutOrientation.Horizontal:
52-
return CreateHorizontalListView();
54+
case LinearItemsLayout listItemsLayout when listItemsLayout.Orientation == ItemsLayoutOrientation.Vertical:
55+
return CreateVerticalListView(listItemsLayout);
56+
case LinearItemsLayout listItemsLayout when listItemsLayout.Orientation == ItemsLayoutOrientation.Horizontal:
57+
return CreateHorizontalListView(listItemsLayout);
5358
}
5459

55-
// Default to a plain old vertical ListView
56-
return new FormsListView();
60+
throw new NotImplementedException("The layout is not implemented");
5761
}
5862

5963
protected virtual void UpdateHeader()
@@ -163,26 +167,54 @@ protected override void HandleLayoutPropertyChanged(PropertyChangedEventArgs pro
163167
formsGridView.Span = ((GridItemsLayout)Layout).Span;
164168
}
165169
}
170+
else if (property.Is(GridItemsLayout.HorizontalItemSpacingProperty) || property.Is(GridItemsLayout.VerticalItemSpacingProperty))
171+
{
172+
if (ListViewBase is FormsGridView formsGridView)
173+
{
174+
formsGridView.ItemContainerStyle = GetItemContainerStyle((GridItemsLayout)Layout);
175+
}
176+
}
177+
else if (property.Is(LinearItemsLayout.ItemSpacingProperty))
178+
{
179+
switch (ListViewBase)
180+
{
181+
case FormsListView formsListView:
182+
formsListView.ItemContainerStyle = GetVerticalItemContainerStyle((LinearItemsLayout)Layout);
183+
break;
184+
case WListView listView:
185+
listView.ItemContainerStyle = GetHorizontalItemContainerStyle((LinearItemsLayout)Layout);
186+
break;
187+
}
188+
}
166189
}
167190

168191
static ListViewBase CreateGridView(GridItemsLayout gridItemsLayout)
169192
{
170193
return new FormsGridView
171194
{
172195
Orientation = gridItemsLayout.Orientation == ItemsLayoutOrientation.Horizontal
173-
? Orientation.Horizontal
174-
: Orientation.Vertical,
196+
? Orientation.Horizontal
197+
: Orientation.Vertical,
175198

176-
Span = gridItemsLayout.Span
199+
Span = gridItemsLayout.Span,
200+
ItemContainerStyle = GetItemContainerStyle(gridItemsLayout)
177201
};
178202
}
179203

180-
static ListViewBase CreateHorizontalListView()
204+
static ListViewBase CreateVerticalListView(LinearItemsLayout listItemsLayout)
181205
{
182-
var horizontalListView = new Windows.UI.Xaml.Controls.ListView()
206+
return new FormsListView()
183207
{
184-
ItemsPanel =
185-
(ItemsPanelTemplate)UWPApp.Current.Resources["HorizontalListItemsPanel"]
208+
ItemContainerStyle = GetVerticalItemContainerStyle(listItemsLayout)
209+
};
210+
}
211+
212+
static ListViewBase CreateHorizontalListView(LinearItemsLayout listItemsLayout)
213+
{
214+
var horizontalListView = new WListView()
215+
{
216+
ItemsPanel = (ItemsPanelTemplate)UWPApp.Current.Resources["HorizontalListItemsPanel"],
217+
ItemContainerStyle = GetHorizontalItemContainerStyle(listItemsLayout)
186218
};
187219

188220
ScrollViewer.SetHorizontalScrollMode(horizontalListView, WScrollMode.Auto);
@@ -191,5 +223,36 @@ static ListViewBase CreateHorizontalListView()
191223

192224
return horizontalListView;
193225
}
226+
227+
static WStyle GetItemContainerStyle(GridItemsLayout layout)
228+
{
229+
var h = layout?.HorizontalItemSpacing ?? 0;
230+
var v = layout?.VerticalItemSpacing ?? 0;
231+
var margin = new WThickness(h, v, h, v);
232+
233+
var style = new WStyle(typeof(GridViewItem));
234+
style.Setters.Add(new WSetter(GridViewItem.MarginProperty, margin));
235+
return style;
236+
}
237+
238+
static WStyle GetVerticalItemContainerStyle(LinearItemsLayout layout)
239+
{
240+
var v = layout?.ItemSpacing ?? 0;
241+
var margin = new WThickness(0, v, 0, v);
242+
243+
var style = new WStyle(typeof(ListViewItem));
244+
style.Setters.Add(new WSetter(ListViewItem.MarginProperty, margin));
245+
return style;
246+
}
247+
248+
static WStyle GetHorizontalItemContainerStyle(LinearItemsLayout layout)
249+
{
250+
var h = layout?.ItemSpacing ?? 0;
251+
var padding = new WThickness(h, 0, h, 0);
252+
253+
var style = new WStyle(typeof(ListViewItem));
254+
style.Setters.Add(new WSetter(ListViewItem.PaddingProperty, padding));
255+
return style;
256+
}
194257
}
195-
}
258+
}

0 commit comments

Comments
 (0)