如何让Xamarin Forms中的滚动条始终可见且永不消失?
Xamarin Forms 实现滚动条始终可见
问题场景
在Xamarin Forms中,ScrollView的滚动条会自动淡出,尝试通过自定义渲染器设置ScrollbarFadingEnabled = false和ScrollBarFadeDuration = 10000但未生效,原代码如下:
class MyScrollViewRenderer : ScrollViewRenderer { public MyScrollViewRenderer(Context context) : base(context) { } protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); if (Controller != null) { this.ScrollbarFadingEnabled = false; this.ScrollBarFadeDuration = 10000; } } }
Android 平台正确实现
原代码的问题在于判断逻辑和属性设置方式不符合Android原生控件的调用规范,修正后的自定义渲染器如下:
using Android.Content; using Xamarin.Forms; using Xamarin.Forms.Platform.Android; [assembly: ExportRenderer(typeof(ScrollView), typeof(MyScrollViewRenderer))] namespace YourAppNamespace.Droid.Renderers { public class MyScrollViewRenderer : ScrollViewRenderer { public MyScrollViewRenderer(Context context) : base(context) { } protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); if (e.NewElement != null) { // 禁用滚动条自动淡出 SetScrollbarFadingEnabled(false); // 设置极大的延迟时间,进一步确保滚动条不消失 ScrollBarDefaultDelayBeforeFade = int.MaxValue; } } } }
核心修正说明
- 添加
ExportRenderer特性,将自定义渲染器与Xamarin.Forms的ScrollView绑定(若使用自定义ScrollView,替换为对应类型即可) - 替换判断条件为
e.NewElement != null,确保控件初始化完成后执行设置 - 使用Android原生方法
SetScrollbarFadingEnabled(false)替代直接赋值,这是正确的属性设置方式 - 可选设置
ScrollBarDefaultDelayBeforeFade为最大值,双重保障滚动条不会自动隐藏
iOS 平台实现(可选)
若需要iOS平台同样保持滚动条始终可见,可创建如下自定义渲染器:
using UIKit; using Xamarin.Forms; using Xamarin.Forms.Platform.iOS; [assembly: ExportRenderer(typeof(ScrollView), typeof(MyScrollViewRenderer))] namespace YourAppNamespace.iOS.Renderers { public class MyScrollViewRenderer : ScrollViewRenderer { protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); if (e.NewElement != null) { // 强制显示垂直/水平滚动条 ShowsVerticalScrollIndicator = true; ShowsHorizontalScrollIndicator = true; // 禁用滚动条自动隐藏 ScrollIndicatorInsets = UIEdgeInsets.Zero; } } } }
内容的提问来源于stack exchange,提问作者A for android
相关产品推荐
相关产品推荐

