You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:52:43