我们可以在ScrollView Xamarin.Forms中隐藏滚动条吗
本文关键字:隐藏 滚动条 Forms Xamarin ScrollView 我们 | 更新日期: 2023-09-27 18:27:19
如标题所述
是否可以在ScrollView
Xamarin.Forms中隐藏滚动条,而不必为每个平台创建自定义渲染器?
我似乎找不到任何不使用自定义渲染器的答案、建议或示例。
编辑2018年3月7日:对于Googleability:合并了一个PR,将此功能添加到默认的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
不应该显示任何滚动条
嘿,发布答案似乎有点晚了,但由于你还没有选择答案,我将发布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。
@Akaya93@Zany您可以使用下一个代码隐藏iOS的滚动条:
this.ShowsHorizontalScrollIndicator = false;
this.ShowsVerticalScrollIndicator = false;
如果你有垂直滚动视图,你可以把VerticalScrollBarVisibility="Never"
放在你的xaml:中
<ScrollView Orientation="Vertical" VerticalScrollBarVisibility="Never">
如果你有水平滚动视图,你可以把HorizontalScrollBarVisibility ="Never"
放在你的xaml:中
<ScrollView Orientation="Horizontal" HorizontalScrollBarVisibility ="Never">
为了在我的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;
此代码适用于Android和IOS替换:
this.HorizontalScrollBarEnabled = false;
this.VerticalScrollBarEnabled = false;
通过
ShowsHorizontalScrollIndicator = false;
ShowsVerticalScrollIndicator = false;