如标题所述
是否可以在ScrollView
Xamarin.Forms中隐藏滚动条而无需为每个平台创建自定义渲染器?
我似乎无法找到任何未使用自定义渲染器的答案,建议或示例。
答案 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;