Skip to content

Commit 2531a00

Browse files
Vijay-NirmalRosuavio
authored andcommitted
Review changes
1 parent 60fc7c5 commit 2531a00

File tree

4 files changed

+28
-19
lines changed

4 files changed

+28
-19
lines changed

Microsoft.Toolkit.Uwp.SampleApp/SamplePages/ListViewExtensions/ListViewExtensionsPage.xaml.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ public sealed partial class ListViewExtensionsPage : Page, IXamlRenderListener
1717
private ListView sampleListView;
1818
private TextBlock indexInput;
1919
private TextBlock itemPlacementInput;
20-
private TextBlock disableAnimationInput;
21-
private TextBlock scrollIfVisibileInput;
20+
private CheckBox disableAnimationInput;
21+
private CheckBox scrollIfVisibileInput;
2222
private TextBlock additionalHorizontalOffsetInput;
2323
private TextBlock additionalVerticalOffsetInput;
2424

@@ -33,8 +33,8 @@ public void OnXamlRendered(FrameworkElement control)
3333
sampleListView = control.FindChild("SampleListView") as ListView;
3434
indexInput = control.FindChild("IndexInput") as TextBlock;
3535
itemPlacementInput = control.FindChild("ItemPlacementInput") as TextBlock;
36-
disableAnimationInput = control.FindChild("DisableAnimationInput") as TextBlock;
37-
scrollIfVisibileInput = control.FindChild("ScrollIfVisibileInput") as TextBlock;
36+
disableAnimationInput = control.FindChild("DisableAnimationInput") as CheckBox;
37+
scrollIfVisibileInput = control.FindChild("ScrollIfVisibileInput") as CheckBox;
3838
additionalHorizontalOffsetInput = control.FindChild("AdditionalHorizontalOffsetInput") as TextBlock;
3939
additionalVerticalOffsetInput = control.FindChild("AdditionalVerticalOffsetInput") as TextBlock;
4040

@@ -51,12 +51,12 @@ private void Load()
5151
{
5252
SampleController.Current.RegisterNewCommand("Start Smooth Scroll", (sender, args) =>
5353
{
54-
var index = int.Parse(indexInput.Text);
55-
var itemPlacement = (ItemPlacement)Enum.Parse(typeof(ItemPlacement), itemPlacementInput.Text);
56-
var disableAnimation = bool.Parse(disableAnimationInput.Text);
57-
var scrollIfVisibile = bool.Parse(scrollIfVisibileInput.Text);
58-
var additionalHorizontalOffset = int.Parse(additionalHorizontalOffsetInput.Text);
59-
var additionalVerticalOffset = int.Parse(additionalVerticalOffsetInput.Text);
54+
var index = int.Parse(indexInput?.Text);
55+
var itemPlacement = (ItemPlacement)Enum.Parse(typeof(ItemPlacement), itemPlacementInput?.Text);
56+
var disableAnimation = disableAnimationInput?.IsChecked ?? false;
57+
var scrollIfVisibile = scrollIfVisibileInput?.IsChecked ?? true;
58+
var additionalHorizontalOffset = int.Parse(additionalHorizontalOffsetInput?.Text);
59+
var additionalVerticalOffset = int.Parse(additionalVerticalOffsetInput?.Text);
6060
sampleListView.SmoothScrollIntoViewWithIndex(index, itemPlacement, disableAnimation, scrollIfVisibile, additionalHorizontalOffset, additionalVerticalOffset);
6161
});
6262

Microsoft.Toolkit.Uwp.SampleApp/SamplePages/ListViewExtensions/ListViewExtensionsXaml.bind

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
<Grid>
2323
<TextBlock x:Name="IndexInput" x:Load="False" Text="@[Index:Slider:100:0-200]" Visibility="Collapsed"></TextBlock>
2424
<TextBlock x:Name="ItemPlacementInput" x:Load="False" Text="@[Item Placement:Enum:ItemPlacement.Default]" Visibility="Collapsed"></TextBlock>
25-
<TextBlock x:Name="DisableAnimationInput" x:Load="False" Text="@[Disable Animation:Bool:False]" Visibility="Collapsed"></TextBlock>
26-
<TextBlock x:Name="ScrollIfVisibileInput" x:Load="False" Text="@[Scroll If Visibile:Bool:True]" Visibility="Collapsed"></TextBlock>
25+
<CheckBox x:Name="DisableAnimationInput" x:Load="False" IsChecked="@[Disable Animation:Bool:False]" Visibility="Collapsed"></CheckBox>
26+
<CheckBox x:Name="ScrollIfVisibileInput" x:Load="False" IsChecked="@[Scroll If Visibile:Bool:True]" Visibility="Collapsed"></CheckBox>
2727
<TextBlock x:Name="AdditionalHorizontalOffsetInput" x:Load="False" Text="@[Additional Horizontal Offset:Slider:0:-500-500]" Visibility="Collapsed"></TextBlock>
2828
<TextBlock x:Name="AdditionalVerticalOffsetInput" x:Load="False" Text="@[Additional Vertical Offset:Slider:0:-500-500]" Visibility="Collapsed"></TextBlock>
2929

Microsoft.Toolkit.Uwp.UI/Extensions/ListViewBase/ItemPlacement.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public enum ItemPlacement
2525
Top,
2626

2727
/// <summary>
28-
/// Aligned centre
28+
/// Aligned center
2929
/// </summary>
30-
Centre,
30+
Center,
3131

3232
/// <summary>
3333
/// Aligned right

Microsoft.Toolkit.Uwp.UI/Extensions/ListViewBase/SmoothScrollIntoView.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,25 @@ public static class SmoothScrollIntoView
2020
/// Smooth scrolling the list to bring the specified index into view
2121
/// </summary>
2222
/// <param name="listViewBase">List to scroll</param>
23-
/// <param name="index">The intex to bring into view</param>
23+
/// <param name="index">The index to bring into view. Index can be negative.</param>
2424
/// <param name="itemPlacement">Set the item placement after scrolling</param>
2525
/// <param name="disableAnimation">Set true to disable animation</param>
26-
/// <param name="scrollIfVisibile">Set true to disable scrolling when the corresponding item is in view</param>
26+
/// <param name="scrollIfVisible">Set false to disable scrolling when the corresponding item is in view</param>
2727
/// <param name="additionalHorizontalOffset">Adds additional horizontal offset</param>
2828
/// <param name="additionalVerticalOffset">Adds additional vertical offset</param>
2929
/// <returns>Note: Even though this return <see cref="Task"/>, it will not wait until the scrolling completes</returns>
30-
public static async Task SmoothScrollIntoViewWithIndex(this ListViewBase listViewBase, int index, ItemPlacement itemPlacement = ItemPlacement.Default, bool disableAnimation = false, bool scrollIfVisibile = true, int additionalHorizontalOffset = 0, int additionalVerticalOffset = 0)
30+
public static async Task SmoothScrollIntoViewWithIndex(this ListViewBase listViewBase, int index, ItemPlacement itemPlacement = ItemPlacement.Default, bool disableAnimation = false, bool scrollIfVisible = true, int additionalHorizontalOffset = 0, int additionalVerticalOffset = 0)
3131
{
3232
if (index > (listViewBase.Items.Count - 1))
3333
{
3434
index = listViewBase.Items.Count - 1;
3535
}
3636

37+
if (index < -listViewBase.Items.Count)
38+
{
39+
index = -listViewBase.Items.Count;
40+
}
41+
3742
index = (index < 0) ? (index + listViewBase.Items.Count) : index;
3843

3944
bool isVirtualizing = default;
@@ -42,6 +47,8 @@ public static async Task SmoothScrollIntoViewWithIndex(this ListViewBase listVie
4247
var scrollViewer = listViewBase.FindDescendant<ScrollViewer>();
4348
var selectorItem = listViewBase.ContainerFromIndex(index) as SelectorItem;
4449

50+
// If selectorItem is null then the panel is virtualized.
51+
// So in order to get the container of the item we need to scroll to that item first and then use ContainerFromIndex
4552
if (selectorItem == null)
4653
{
4754
isVirtualizing = true;
@@ -70,6 +77,7 @@ public static async Task SmoothScrollIntoViewWithIndex(this ListViewBase listVie
7077
var transform = selectorItem.TransformToVisual((UIElement)scrollViewer.Content);
7178
var position = transform.TransformPoint(new Point(0, 0));
7279

80+
// Scrolling back to previous position
7381
if (isVirtualizing)
7482
{
7583
var tcs = new TaskCompletionSource<object>();
@@ -104,7 +112,8 @@ public static async Task SmoothScrollIntoViewWithIndex(this ListViewBase listVie
104112

105113
double finalXPosition, finalYPosition;
106114

107-
if (!scrollIfVisibile && (previousXOffset <= maxXPosition && previousXOffset >= minXPosition) && (previousYOffset <= maxYPosition && previousYOffset >= minYPosition))
115+
// If the Item is in view and scrollIfVisible is false then we don't need to scroll
116+
if (!scrollIfVisible && (previousXOffset <= maxXPosition && previousXOffset >= minXPosition) && (previousYOffset <= maxYPosition && previousYOffset >= minYPosition))
108117
{
109118
finalXPosition = previousXOffset;
110119
finalYPosition = previousYOffset;
@@ -152,7 +161,7 @@ public static async Task SmoothScrollIntoViewWithIndex(this ListViewBase listVie
152161
finalYPosition = maxYPosition + additionalVerticalOffset;
153162
break;
154163

155-
case ItemPlacement.Centre:
164+
case ItemPlacement.Center:
156165
var centreX = (listViewBaseWidth - selectorItemWidth) / 2.0;
157166
var centreY = (listViewBaseHeight - selectorItemHeight) / 2.0;
158167
finalXPosition = maxXPosition - centreX + additionalHorizontalOffset;

0 commit comments

Comments
 (0)