Xamarin表单禁用在TabbedPage中的页面之间滑动

时间:2017-08-22 14:41:41

标签: android xamarin xamarin.forms tabbedpage

有没有办法在Xamarin Forms中禁用Android上的TabbedPage之间的滑动?

XAML:

<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="App.MainTabbedPage">
</TabbedPage>

C#:

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace App
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MainTabbedPage : TabbedPage
    {
        public MainTabbedPage ()
        {
            InitializeComponent();
            Children.Add(new PageOne());
            Children.Add(new PageTwo());
            Children.Add(new PageThree());
        }
    }
}

目前的行为是您只需滑动即可在页面之间切换。但是我想禁用它...... 我找到this link但我似乎无法在我的代码中实现它。任何帮助表示赞赏

3 个答案:

答案 0 :(得分:10)

您基本上有两个选择:使用Code Behind或XAML。我将在这个答案中描述。

代码背后

使用Code Behind时,您可以对任何给定的SetIsSwipePagingEnabled(bool)使用TabbedPage扩展名方法:

namespace App
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class MainTabbedPage : TabbedPage
    {
        public MainTabbedPage ()
        {
            InitializeComponent();

            this.On<Xamarin.Forms.PlatformConfiguration.Android>().SetIsSwipePagingEnabled(false);

            Children.Add(new PageOne());
            Children.Add(new PageTwo());
            Children.Add(new PageThree());
        }
    }
}

XAML

在XAML中,您可以将IsSwipePagingEnabled的{​​{1}}属性设置为TabbedPage,如下所示:

False

其他详情可在this post

中找到

答案 1 :(得分:6)

修改

您也可以从Xamarin.Forms.TabbedPage

调用以下代码
 this.On<Xamarin.Forms.PlatformConfiguration.Android>().SetIsSwipePagingEnabled(false);

原始答案(仍然有效):

呵呵,我希望在我入侵我之前找到了上面的答案。无论如何,如果您为选项卡页面使用自定义渲染器,则可以在那里包含该选项:

    public class MyTabbedRenderer : TabbedPageRenderer
    {

        private TabLayout TabsLayout { get; set; }
        private ViewPager PagerLayout { get; set; }

        protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e)
        {
            base.OnElementChanged(e);

            //find the pager and tabs
            for (int i = 0; i < ChildCount; ++i)
            {
                Android.Views.View view = (Android.Views.View)GetChildAt(i);
                if (view is TabLayout) TabsLayout = (TabLayout)view;
                else if (view is ViewPager) PagerLayout = (ViewPager)view;
            }

            if (PagerLayout!=null) //now disable the swiping
            {
                var propertyInfo = PagerLayout.GetType().GetProperty("EnableGesture");
                propertyInfo.SetValue(PagerLayout, false, null);
            }

        }
...

答案 2 :(得分:5)

如果您使用标签页,那么这一行代码可以正常工作

namespace App
{

 public partial class MainTabbedPage : TabbedPage
 {
    public MainTabbedPage ()
    {
        InitializeComponent();
        Xamarin.Forms.PlatformConfiguration.AndroidSpecific.TabbedPage.SetIsSwipePagingEnabled(this, false);

        Children.Add(new PageOne());
        Children.Add(new PageTwo());
        Children.Add(new PageThree());
    }
  }
}