在 .NET MAUI Shell 选项卡内水平滑动元素

问题描述 投票:0回答:1

我在

AppShell.xaml
文件中有 2 个选项卡,使用以下代码实现:

<TabBar>
    <Tab Route="Tabs">
        <ShellContent
            Title="FirstPage"
            ContentTemplate="{DataTemplate local:FirstPage}"
            Route="FirstPage" />
        <ShellContent
            Title="SecondPage"
            ContentTemplate="{DataTemplate local:SecondPage}"
            Route="SecondPage" />
    </Tab>
</TabBar>

FirstPage
有一个
WebView
,其中应在其内容的某些部分使用左右滑动来水平滚动某些文本。

问题是向右滑动也会切换到下一个选项卡,并且该操作优先于滚动文本。

有没有办法覆盖手势并在滑动可滚动文本时滚动

WebView
内的文本,当然当滑动
WebView
没有水平滚动文本的其他部分时更改到下一个选项卡?

c# webview maui tabbar app-shell
1个回答
0
投票

我重现了你的问题,需要使用

ShellRenderer
来解决。

首先创建一个继承于

Shellrenderer
的类,我将其命名为CustomShellRenderer:

#if ANDROID
    public class CustomShellRenderer : ShellRenderer
    {
        protected override IShellSectionRenderer CreateShellSectionRenderer(ShellSection shellSection)
        {
            return new CustomShellSectionRenderer(this);
        }
    }

    public class CustomShellSectionRenderer : ShellSectionRenderer
    {
        public CustomShellSectionRenderer(IShellContext shellContext) : base(shellContext)
        {
        }

        public override Android.Views.View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            var result =  base.OnCreateView(inflater, container, savedInstanceState);
            SetViewPager2UserInputEnabled(false);
            return result;
        }
        protected override void SetViewPager2UserInputEnabled(bool value)
        {
            base.SetViewPager2UserInputEnabled(false);
        }
    }
#endif
}

然后在 MauiProgram.cs 中注册处理程序:

builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                })
                .ConfigureMauiHandlers
                (
                    handlers =>
                    {
#if ANDROID
                        handlers.AddHandler(typeof(Shell), typeof(CustomShellRenderer));
#endif
                    }
© www.soinside.com 2019 - 2024. All rights reserved.