Skip to content

Commit e7b420a

Browse files
authored
Merge pull request #39 from Redth/scrollbarvisibility
Add support for scrollbar visibility
2 parents 245a2d6 + 6889e7a commit e7b420a

File tree

6 files changed

+98
-0
lines changed

6 files changed

+98
-0
lines changed

VirtualListView/Apple/VirtualListViewHandler.ios.maccatalyst.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,16 @@ void UpdateEmptyView()
232232
}
233233
}
234234

235+
void UpdateVerticalScrollbarVisibility(ScrollBarVisibility scrollBarVisibility)
236+
{
237+
PlatformView.ShowsVerticalScrollIndicator = scrollBarVisibility == ScrollBarVisibility.Always || scrollBarVisibility == ScrollBarVisibility.Default;
238+
}
239+
240+
void UpdateHorizontalScrollbarVisibility(ScrollBarVisibility scrollBarVisibility)
241+
{
242+
PlatformView.ShowsHorizontalScrollIndicator = scrollBarVisibility == ScrollBarVisibility.Always || scrollBarVisibility == ScrollBarVisibility.Default;
243+
}
244+
235245
public void InvalidateData()
236246
{
237247
this.PlatformView.InvokeOnMainThread(() => {

VirtualListView/Controls/VirtualListView.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,25 @@ public VirtualListViewItemTemplateSelector ItemTemplateSelector
7777
public static readonly BindableProperty ItemTemplateSelectorProperty =
7878
BindableProperty.Create(nameof(ItemTemplateSelector), typeof(VirtualListViewItemTemplateSelector), typeof(VirtualListView), default);
7979

80+
81+
public ScrollBarVisibility VerticalScrollbarVisibility
82+
{
83+
get => (ScrollBarVisibility)GetValue(VerticalScrollbarVisibilityProperty);
84+
set => SetValue(VerticalScrollbarVisibilityProperty, value);
85+
}
86+
87+
public static readonly BindableProperty VerticalScrollbarVisibilityProperty =
88+
BindableProperty.Create(nameof(VerticalScrollbarVisibility), typeof(ScrollBarVisibility), typeof(VirtualListView), ScrollBarVisibility.Default);
89+
90+
91+
public ScrollBarVisibility HorizontalScrollbarVisibility
92+
{
93+
get => (ScrollBarVisibility)GetValue(HorizontalScrollbarVisibilityProperty);
94+
set => SetValue(HorizontalScrollbarVisibilityProperty, value);
95+
}
8096

97+
public static readonly BindableProperty HorizontalScrollbarVisibilityProperty =
98+
BindableProperty.Create(nameof(HorizontalScrollbarVisibility), typeof(ScrollBarVisibility), typeof(VirtualListView), ScrollBarVisibility.Default);
8199

82100
public DataTemplate SectionHeaderTemplate
83101
{

VirtualListView/IVirtualListView.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ public interface IVirtualListView : IView
2525
IList<ItemPosition> SelectedItems { get; set; }
2626

2727
ItemPosition? SelectedItem { get; set; }
28+
29+
ScrollBarVisibility VerticalScrollbarVisibility { get; set; }
30+
31+
ScrollBarVisibility HorizontalScrollbarVisibility { get; set; }
2832

2933
event EventHandler<SelectedItemsChangedEventArgs> OnSelectedItemsChanged;
3034

VirtualListView/Platforms/Android/VirtualListViewHandler.android.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,35 @@ void UpdateEmptyView()
164164
UpdateEmptyViewVisibility();
165165
}
166166
}
167+
168+
ScrollBarVisibility _defaultHorizontalScrollVisibility = ScrollBarVisibility.Default;
169+
ScrollBarVisibility _defaultVerticalScrollVisibility = ScrollBarVisibility.Default;
170+
171+
void UpdateVerticalScrollbarVisibility(ScrollBarVisibility scrollBarVisibility)
172+
{
173+
if (_defaultVerticalScrollVisibility == ScrollBarVisibility.Default)
174+
_defaultVerticalScrollVisibility =
175+
recyclerView.VerticalScrollBarEnabled ? ScrollBarVisibility.Always : ScrollBarVisibility.Never;
176+
177+
var newVerticalScrollVisiblility = scrollBarVisibility;
178+
179+
if (newVerticalScrollVisiblility == ScrollBarVisibility.Default)
180+
newVerticalScrollVisiblility = _defaultVerticalScrollVisibility;
181+
182+
recyclerView.VerticalScrollBarEnabled = newVerticalScrollVisiblility == ScrollBarVisibility.Always;
183+
}
184+
185+
void UpdateHorizontalScrollbarVisibility(ScrollBarVisibility scrollBarVisibility)
186+
{
187+
if (_defaultHorizontalScrollVisibility == ScrollBarVisibility.Default)
188+
_defaultHorizontalScrollVisibility =
189+
recyclerView.HorizontalScrollBarEnabled ? ScrollBarVisibility.Always : ScrollBarVisibility.Never;
190+
191+
var newHorizontalScrollVisiblility = scrollBarVisibility;
192+
193+
if (newHorizontalScrollVisiblility == ScrollBarVisibility.Default)
194+
newHorizontalScrollVisiblility = _defaultHorizontalScrollVisibility;
195+
196+
recyclerView.HorizontalScrollBarEnabled = newHorizontalScrollVisiblility == ScrollBarVisibility.Always;
197+
}
167198
}

VirtualListView/Platforms/Windows/VirtualListViewHandler.windows.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using WGrid = Microsoft.UI.Xaml.Controls.Grid;
55
using WVisibility = Microsoft.UI.Xaml.Visibility;
66
using WFrameworkElement = Microsoft.UI.Xaml.FrameworkElement;
7+
using WScrollBarVisibility = Microsoft.UI.Xaml.Controls.ScrollBarVisibility;
78
using Microsoft.Maui.Platform;
89
using Microsoft.UI.Xaml;
910

@@ -164,4 +165,26 @@ void UpdateEmptyView()
164165

165166
UpdateEmptyViewVisibility();
166167
}
168+
169+
void UpdateVerticalScrollbarVisibility(ScrollBarVisibility scrollBarVisibility)
170+
{
171+
scrollViewer.VerticalScrollBarVisibility = scrollBarVisibility switch
172+
{
173+
ScrollBarVisibility.Default => WScrollBarVisibility.Auto,
174+
ScrollBarVisibility.Always => WScrollBarVisibility.Visible,
175+
ScrollBarVisibility.Never => WScrollBarVisibility.Hidden,
176+
_ => WScrollBarVisibility.Auto
177+
};
178+
}
179+
180+
void UpdateHorizontalScrollbarVisibility(ScrollBarVisibility scrollBarVisibility)
181+
{
182+
scrollViewer.HorizontalScrollBarVisibility = scrollBarVisibility switch
183+
{
184+
ScrollBarVisibility.Default => WScrollBarVisibility.Auto,
185+
ScrollBarVisibility.Always => WScrollBarVisibility.Visible,
186+
ScrollBarVisibility.Never => WScrollBarVisibility.Hidden,
187+
_ => WScrollBarVisibility.Auto
188+
};
189+
}
167190
}

VirtualListView/VirtualListViewHandler.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ public partial class VirtualListViewHandler
1818
[nameof(IVirtualListView.IsRefreshEnabled)] = MapIsRefreshEnabled,
1919
[nameof(IVirtualListView.EmptyView)] = MapEmptyView,
2020
[nameof(IVirtualListView.SelectedItems)] = MapSelectedItems,
21+
[nameof(IVirtualListView.VerticalScrollbarVisibility)] = MapVerticalScrollbarVisibility,
22+
[nameof(IVirtualListView.HorizontalScrollbarVisibility)] = MapHorizontalScrollbarVisibility,
2123
};
2224

2325
public static CommandMapper<IVirtualListView, VirtualListViewHandler> CommandMapper = new(ViewCommandMapper)
@@ -135,5 +137,15 @@ public static void MapIsFooterVisible(VirtualListViewHandler handler, IVirtualLi
135137
{
136138
handler?.InvalidateData();
137139
}
140+
141+
public static void MapVerticalScrollbarVisibility(VirtualListViewHandler handler, IVirtualListView virtualListView)
142+
{
143+
handler?.UpdateVerticalScrollbarVisibility(virtualListView.VerticalScrollbarVisibility);
144+
}
145+
146+
public static void MapHorizontalScrollbarVisibility(VirtualListViewHandler handler, IVirtualListView virtualListView)
147+
{
148+
handler?.UpdateHorizontalScrollbarVisibility(virtualListView.HorizontalScrollbarVisibility);
149+
}
138150

139151
}

0 commit comments

Comments
 (0)