【问题标题】:How to hide scroll bar in scrollview xamarin forms?如何在 scrollview xamarin 表单中隐藏滚动条?
【发布时间】:2016-08-23 04:51:50
【问题描述】:

我正在实现我的自定义选项卡控件,但是我遇到了一个问题,我在水平模式下使用滚动视图来创建滚动选项卡,目前我正在获取滚动条,但我只想隐藏它并制作一个相同的选项卡控件安卓。 有没有直接的解决办法?

【问题讨论】:

    标签: xamarin xamarin.ios xamarin.android xamarin.forms


    【解决方案1】:

    我认为他们没有任何可用的直接解决方案。您只需通过扩展默认滚动视图渲染器来创建自定义渲染器。这就是我所做的,我希望它可以达到你的目的。

    Android 特定代码:

    [assembly: ExportRenderer(typeof(Xamarin.Forms.ScrollView), typeof(ResponsiveFramework.Droid.ScrollViewEXRenderer))]
    namespace ResponsiveFramework.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 -= OnElementPropetyChanged;
                }
    
                e.NewElement.PropertyChanged += OnElementPropetyChanged;
            }
    
            private void OnElementPropetyChanged(object sender, PropertyChangedEventArgs e)
            {
                if (ChildCount > 0)
                {
                    GetChildAt(0).HorizontalScrollBarEnabled = false;
                }
            }
        }
    }
    

    iOS 特定代码:

    [assembly: ExportRenderer(typeof(Xamarin.Forms.ScrollView), typeof(ResponsiveFramework.iOS.ScrollViewEXRenderer))]
    namespace ResponsiveFramework.iOS
    {
        public class ScrollViewEXRenderer : ScrollViewRenderer
        {
            protected override void OnElementChanged(VisualElementChangedEventArgs e)
            {
                base.OnElementChanged(e);
    
                var result = this.Element.GetValue(ScrollViewPoperty.HorizontalScrollBarVisibleProperty);
                bool IsHorizontalScrollBarVisible = Convert.ToBoolean(result);
                if (IsHorizontalScrollBarVisible == false)
                {
                    if (e.OldElement != null || this.Element == null)
                    {
                        return;
                    }
    
                    if (e.OldElement != null)
                    {
                        e.OldElement.PropertyChanged -= OnElementPropertyChanged;
                    }
    
                    e.NewElement.PropertyChanged += OnElementPropertyChanged;
                }
            }
            private void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
            {
    
                this.ShowsHorizontalScrollIndicator = false;
            }
        }
    }
    

    【讨论】:

    • 看起来这是特定于 Android 的。问题是针对 Xamarin 表单(包括标签中的 ios 和其他目标)。 - 您能否在答案中添加更多关于将其用于其他目标的详细信息? -- 并且至少有一个关于如何连接它的链接(即属性是否足够,或者我们是否必须在 XAML 中做一些事情以便我们想要从中删除滚动条的控件使用它?)
    • @BrainSlugs83 我已经为 IOS 渲染器添加了代码。要在 Xaml 中连接任何事情,只需导出要使用的控件的渲染器即可。如上面的示例所示。
    • @BrainSlugs83 github.com/veloxcore/Xamstrap 你会在 src 文件夹中找到示例。
    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多