我在
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
没有水平滚动文本的其他部分时更改到下一个选项卡?
我重现了你的问题,需要使用
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
}