正如标题所述
是否可以隐藏ScrollView
Xamarin.Forms中的滚动条而无需为每个平台创建自定义渲染器?
我似乎无法找到任何未使用自定义渲染器的答案,建议或示例.
编辑2018年3月7日: for Googleability:合并PR,将此功能添加到默认的Xamarin.Forms工具包中.它应该很快在NuGets中发布.
原始答案:
如评论中所述,如果不使用a,则无法实现此目的CustomRenderer
.
ScrollViewExRenderer
在你的iOS和Droid项目中创建一个类并将其放入其中,代码中的链接代码也是如此;
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
s不应该显示任何滚动条
嘿,这似乎有点晚发布答案,但由于你没有选择答案,我将发布android和Windows项目的程序.杰拉德给出的答案在某些时候可能是真的,但是我无法让它起作用,因为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.