Skip to content

Commit b1033fb

Browse files
committed
Added Scroll indicator
1 parent 525bc25 commit b1033fb

File tree

3 files changed

+39
-6
lines changed

3 files changed

+39
-6
lines changed

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,16 @@
3535
</Grid>
3636

3737
<StackPanel Grid.Column="1" Margin="5,10,10,0" Width="200">
38-
<TextBlock Text="Smooth Scroll Settings" FontSize="{StaticResource TextStyleLargeFontSize}" Margin="0,0,0,10"/>
38+
<TextBlock Text="Smooth Scroll Settings" FontSize="{StaticResource TextStyleLargeFontSize}"/>
3939
<TextBox x:Name="IndexInput"
4040
Header="Index"
4141
InputScope="Number"
42-
Text="100" />
42+
Text="100"
43+
Margin="0,10,0,0" />
4344
<ComboBox x:Name="ItemPlacementInput"
4445
Header="Item Placement"
45-
SelectedIndex="0">
46+
SelectedIndex="0"
47+
Margin="0,10,0,0" >
4648
<x:String>Default</x:String>
4749
<x:String>Left</x:String>
4850
<x:String>Top</x:String>
@@ -52,18 +54,25 @@
5254
</ComboBox>
5355
<CheckBox x:Name="DisableAnimationInput"
5456
Content="Disable Animation"
55-
IsChecked="False" />
57+
IsChecked="False"
58+
Margin="0,10,0,0" />
5659
<CheckBox x:Name="ScrollIfVisibileInput"
5760
Content="Scroll If Visible"
5861
IsChecked="True" />
5962
<TextBox x:Name="AdditionalHorizontalOffsetInput"
6063
Header="Horizontal Offset"
6164
InputScope="Number"
62-
Text="0" />
65+
Text="0"
66+
Margin="0,10,0,0" />
6367
<TextBox x:Name="AdditionalVerticalOffsetInput"
6468
Header="Vertical Offset"
6569
InputScope="Number"
66-
Text="0" />
70+
Text="0"
71+
Margin="0,10,0,0" />
72+
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
73+
<Ellipse x:Name="ScrollIndicator" Fill="Red" Width="15" Height="15"/>
74+
<TextBlock x:Name="ScrollIndicatorTest" Text="Scroll not started" Margin="10,0,0,0"/>
75+
</StackPanel>
6776
</StackPanel>
6877
</Grid>
6978
</Page>

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
using System.Collections.ObjectModel;
77
using System.Windows.Input;
88
using Microsoft.Toolkit.Uwp.UI;
9+
using Windows.UI;
910
using Windows.UI.Popups;
1011
using Windows.UI.Xaml;
1112
using Windows.UI.Xaml.Controls;
13+
using Windows.UI.Xaml.Media;
1214

1315
namespace Microsoft.Toolkit.Uwp.SampleApp.SamplePages
1416
{
@@ -55,7 +57,9 @@ private void Load()
5557
var scrollIfVisibile = ScrollIfVisibileInput.IsChecked ?? true;
5658
var additionalHorizontalOffset = int.TryParse(AdditionalHorizontalOffsetInput.Text, out var ho) ? ho : 0;
5759
var additionalVerticalOffset = int.TryParse(AdditionalVerticalOffsetInput.Text, out var vo) ? vo : 0;
60+
UpdateScrollIndicator(true);
5861
await sampleListView.SmoothScrollIntoViewWithIndexAsync(index, itemPlacement, disableAnimation, scrollIfVisibile, additionalHorizontalOffset, additionalVerticalOffset);
62+
UpdateScrollIndicator(false);
5963
});
6064

6165
if (sampleListView != null)
@@ -64,6 +68,20 @@ private void Load()
6468
}
6569
}
6670

71+
private void UpdateScrollIndicator(bool isScrolling)
72+
{
73+
if (isScrolling)
74+
{
75+
ScrollIndicatorTest.Text = "Scroll started";
76+
ScrollIndicator.Fill = new SolidColorBrush(Colors.Green);
77+
}
78+
else
79+
{
80+
ScrollIndicator.Fill = new SolidColorBrush(Colors.Red);
81+
ScrollIndicatorTest.Text = "Scroll completed";
82+
}
83+
}
84+
6785
private ObservableCollection<string> GetOddEvenSource(int count)
6886
{
6987
var oddEvenSource = new ObservableCollection<string>();

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,12 @@ public static async Task SmoothScrollIntoViewWithItemAsync(this ListViewBase lis
201201
/// <param name="disableAnimation">if set to <c>true</c> disable animation.</param>
202202
private static async Task ChangeViewAsync(this ScrollViewer scrollViewer, double? horizontalOffset, double? verticalOffset, float? zoomFactor, bool disableAnimation)
203203
{
204+
// MUST check this an return immediately, otherwise this async task will never completes because ViewChanged event won't triggered
205+
if (horizontalOffset == scrollViewer.HorizontalOffset && verticalOffset == scrollViewer.VerticalOffset)
206+
{
207+
return;
208+
}
209+
204210
var tcs = new TaskCompletionSource<object>();
205211

206212
void ViewChanged(object _, ScrollViewerViewChangedEventArgs e)

0 commit comments

Comments
 (0)