Skip to content

Commit 096f86f

Browse files
authored
Merge pull request #130 from Microsoft/dotMorten/ResizeAdaptiveGrid
Resize adaptive grid items correctly
2 parents 773be27 + 8a77b2b commit 096f86f

File tree

3 files changed

+28
-19
lines changed

3 files changed

+28
-19
lines changed

Microsoft.Toolkit.Uwp.UI.Controls/AdaptiveGridView/AdaptiveGridView.Properties.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ public sealed partial class AdaptiveGridView
6262
DependencyProperty.Register(nameof(OneRowModeEnabled), typeof(bool), typeof(AdaptiveGridView), new PropertyMetadata(false, (o, e) => { OnOneRowModeEnabledChanged(o, e.NewValue); }));
6363

6464
/// <summary>
65-
/// Identifies the <see cref="VerticalScroll"/> dependency property.
65+
/// Identifies the <see cref="VerticalScrollMode"/> dependency property.
6666
/// </summary>
67-
private static readonly DependencyProperty VerticalScrollProperty =
68-
DependencyProperty.Register(nameof(VerticalScroll), typeof(ScrollMode), typeof(AdaptiveGridView), new PropertyMetadata(ScrollMode.Auto));
67+
private static readonly DependencyProperty VerticalScrollModeProperty =
68+
DependencyProperty.Register(nameof(VerticalScrollMode), typeof(ScrollMode), typeof(AdaptiveGridView), new PropertyMetadata(ScrollMode.Auto));
6969

7070
/// <summary>
7171
/// Identifies the <see cref="ItemWidth"/> dependency property.
@@ -94,7 +94,7 @@ private static void OnOneRowModeEnabledChanged(DependencyObject d, object newVal
9494
};
9595

9696
self._listView.SetBinding(GridView.MaxHeightProperty, b);
97-
self.VerticalScroll = ScrollMode.Disabled;
97+
self.VerticalScrollMode = ScrollMode.Disabled;
9898
}
9999
}
100100
}
@@ -173,10 +173,10 @@ public bool OneRowModeEnabled
173173
/// </summary>
174174
public event ItemClickEventHandler ItemClick;
175175

176-
private ScrollMode VerticalScroll
176+
private ScrollMode VerticalScrollMode
177177
{
178-
get { return (ScrollMode)GetValue(VerticalScrollProperty); }
179-
set { SetValue(VerticalScrollProperty, value); }
178+
get { return (ScrollMode)GetValue(VerticalScrollModeProperty); }
179+
set { SetValue(VerticalScrollModeProperty, value); }
180180
}
181181

182182
private double ItemWidth

Microsoft.Toolkit.Uwp.UI.Controls/AdaptiveGridView/AdaptiveGridView.cs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
1010
// THE CODE OR THE USE OR OTHER DEALINGS IN THE CODE.
1111
// ******************************************************************
12+
using System.Collections.Generic;
1213
using Windows.UI.Xaml;
1314
using Windows.UI.Xaml.Controls;
1415

@@ -47,17 +48,13 @@ private void RecalculateLayout(double containerWidth)
4748
return;
4849
}
4950

50-
if (_columns == 0)
51-
{
52-
_columns = CalculateColumns(containerWidth, DesiredWidth);
53-
}
54-
else
51+
_columns = CalculateColumns(containerWidth, DesiredWidth);
52+
53+
// If there's less items than there's columns, reduce the column count;
54+
if (_listView != null && _listView.Items != null
55+
&& _listView.Items.Count > 0 && _listView.Items.Count < _columns)
5556
{
56-
var desiredColumns = CalculateColumns(containerWidth, DesiredWidth);
57-
if (desiredColumns != _columns)
58-
{
59-
_columns = desiredColumns;
60-
}
57+
_columns = _listView.Items.Count;
6158
}
6259

6360
ItemWidth = (containerWidth / _columns) - 5;
@@ -75,6 +72,7 @@ protected override void OnApplyTemplate()
7572
{
7673
_listView.SizeChanged -= ListView_SizeChanged;
7774
_listView.ItemClick -= ListView_ItemClick;
75+
_listView.Items.VectorChanged -= ListViewItems_VectorChanged;
7876
_listView = null;
7977
}
8078

@@ -83,12 +81,23 @@ protected override void OnApplyTemplate()
8381
{
8482
_listView.SizeChanged += ListView_SizeChanged;
8583
_listView.ItemClick += ListView_ItemClick;
84+
_listView.Items.VectorChanged += ListViewItems_VectorChanged;
8685
}
8786

8887
_isInitialized = true;
8988
OnOneRowModeEnabledChanged(this, OneRowModeEnabled);
9089
}
9190

91+
private void ListViewItems_VectorChanged(Windows.Foundation.Collections.IObservableVector<object> sender, Windows.Foundation.Collections.IVectorChangedEventArgs @event)
92+
{
93+
if (_listView != null && !double.IsNaN(_listView.ActualWidth))
94+
{
95+
// If the item count changes, check if more or less columns needs to be rendered,
96+
// in case we were having fewer items than columns.
97+
RecalculateLayout(_listView.ActualWidth);
98+
}
99+
}
100+
92101
private void ListView_ItemClick(object sender, ItemClickEventArgs e)
93102
{
94103
var cmd = ItemClickCommand;

Microsoft.Toolkit.Uwp.UI.Controls/AdaptiveGridView/AdaptiveGridView.xaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
<ControlTemplate TargetType="controls:AdaptiveGridView">
99
<Grid>
1010
<ContentPresenter x:Name="templateProxy" Width="{TemplateBinding ItemWidth}" Height="{TemplateBinding ItemHeight}" ContentTemplate="{TemplateBinding ItemTemplate}" Visibility="Collapsed" />
11-
<GridView x:Name="ListView" IsItemClickEnabled="True" SelectionMode="None" IsSwipeEnabled="False" IsTabStop="False"
12-
ScrollViewer.VerticalScrollMode="{TemplateBinding VerticalScroll}" ScrollViewer.VerticalScrollBarVisibility="Hidden"
11+
<GridView HorizontalAlignment="Stretch" x:Name="ListView" IsItemClickEnabled="True" SelectionMode="None" IsSwipeEnabled="False" IsTabStop="False"
12+
ScrollViewer.VerticalScrollMode="{TemplateBinding VerticalScrollMode}" ScrollViewer.VerticalScrollBarVisibility="Hidden"
1313
ItemsSource="{TemplateBinding ItemsSource}">
1414
<GridView.ItemTemplate>
1515
<DataTemplate>

0 commit comments

Comments
 (0)