我们可以在ScrollView Xamarin.Forms中隐藏滚动条

时间:2015-12-17 10:14:10

标签: c# xamarin xamarin.forms

如标题所述

是否可以在ScrollView Xamarin.Forms中隐藏滚动条而无需为每个平台创建自定义渲染器?

我似乎无法找到任何未使用自定义渲染器的答案,建议或示例。

6 个答案:

答案 0 :(得分:13)

编辑2018年3月7日: for Googleability:PR was merged将此功能添加到默认的Xamarin.Forms工具包中。它应该很快在NuGets中发布。

原始回答:

如评论中所述,如果不使用CustomRenderer,则无法实现此目的。

在iOS和Droid项目中创建一个类ScrollViewExRenderer并将其放入其中,代码中的链接代码也是如此;

public class ScrollViewExRenderer : ScrollViewRenderer
{
    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);

        if (e.OldElement == null || this.Element == null)
            return;

        if (e.OldElement != null)
            e.OldElement.PropertyChanged -= OnElementPropertyChanged;

        e.NewElement.PropertyChanged += OnElementPropertyChanged;

    }

    protected void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (ChildCount > 0)
        {
            GetChildAt(0).HorizontalScrollBarEnabled = false;
            GetChildAt(0).VerticalScrollBarEnabled = false;
        }
    }
} 

在命名空间声明之上放置此行;

[assembly: ExportRenderer(typeof(ScrollView), typeof(ScrollViewExRenderer))]

现在,您的ScrollView不应显示任何滚动条

答案 1 :(得分:8)

嘿,发布答案似乎有点迟,但由于你还没有选择答案,我会发布android和windows项目的程序。 gerald给出的答案可能在某些时候是真的,但是我无法让它起作用,可能是因为xamarin已经发生了很大变化。

在.DROID和.UWP项目中创建一个新类,并添加以下代码

对于.UWP

using Windows.UI.Xaml.Controls;
using System.ComponentModel;
using Xamarin.Forms;
using Xamarin.Forms.Platform.UWP;

[assembly: ExportRenderer(typeof(ScrollView), typeof(App3.UWP.Scrollbardisabledrenderer))]

namespace App3.UWP
{
    public class Scrollbardisabledrenderer : ScrollViewRenderer
    {
        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {


            Control.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
            Control.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden;

        }


    }

}

对于.DROID

using System.ComponentModel;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;



[assembly: ExportRenderer(typeof(ScrollView), typeof(App3.Droid.Scrollbardisabledrenderer))]

namespace App3.Droid
{
    public class Scrollbardisabledrenderer : ScrollViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null || this.Element == null)
                return;

            if (e.OldElement != null)
                e.OldElement.PropertyChanged -= OnElementPropertyChanged;

            e.NewElement.PropertyChanged += OnElementPropertyChanged;



        }

        protected void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {


                this.HorizontalScrollBarEnabled = false;
                this.VerticalScrollBarEnabled = false;



        }
    }
}

对不起.IOS我无法确认我的代码是否正常,因为我没有mac。

答案 2 :(得分:2)

@ Akaya93 @Zany您可以使用下一个代码隐藏iOS滚动条:

this.ShowsHorizontalScrollIndicator = false;
this.ShowsVerticalScrollIndicator = false;

答案 3 :(得分:0)

要在我的Android解决方案中隐藏 XamarinForms 中的ScrollBar,我使用了这个:

https://forums.xamarin.com/discussion/73353/how-to-hide-scroll-bar-in-scrollview

但对于IOS,您必须稍微更改一下代码:

public class ScrollBarDisabledRenderer : ScrollViewRenderer    
{   
     protected override void OnElementChanged(VisualElementChangedEventArgs e)
     {
        base.OnElementChanged(e);
        if (e.OldElement != null || Element == null)
            return;

        if (e.OldElement != null)
            e.OldElement.PropertyChanged -= OnElementPropertyChanged;
        e.NewElement.PropertyChanged += OnElementPropertyChanged;
      }

    private void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        ShowsHorizontalScrollIndicator = false;
        ShowsVerticalScrollIndicator = false;
    }
}

在命名空间声明之上:

[assembly: ExportRenderer(typeof(MyScrollView), typeof(ScrollBarDisabledRenderer))]

因此,IOS的属性名称不同:

ShowsHorizontalScrollIndicator = false; ShowsVerticalScrollIndicator = false;

答案 4 :(得分:0)

如果你有垂直 ScrollView,你可以把 VerticalScrollBarVisibility="Never" 放在你的 xaml 中:

<ScrollView Orientation="Vertical" VerticalScrollBarVisibility="Never">

如果你有水平 ScrollView,你可以把 HorizontalScrollBarVisibility ="Never" 放在你的 xaml 中:

<ScrollView Orientation="Horizontal" HorizontalScrollBarVisibility ="Never">

答案 5 :(得分:-1)

此代码适用于Android和IOS替换:

this.HorizontalScrollBarEnabled = false;
this.VerticalScrollBarEnabled = false;

通过

ShowsHorizontalScrollIndicator = false;
ShowsVerticalScrollIndicator = false;