创建一个SliderRenderer,然后在DispatchTouchEvent(MotionEvent e)中调用RequestDisallowInterceptTouchEvent(boolean),它可以解决这个问题,以下是我的代码:
MainPage:
var tabsXaml = new TabbedPage { Title = "Working with ListView" };
tabsXaml.Children.Add(new BasicListXaml { Title = "Basic", Icon = "icon.png" } );
tabsXaml.Children.Add(new JustView { Title = "JustView", Icon = "icon.png" });
tabsXaml.Children.Add(new UnevenRowsXaml { Title = "UnevenX", Icon = "icon.png" });
tabsXaml.Children.Add(new SliderPage { Title = "SliderPage", Icon = "icon.png" });
MainPage = tabsXaml;
< p >在 < code >TabbedPage 中的第二个页面:
<ContentPage.Content>
<local:MyListView x:Name="listView" ItemSelected="OnItemSelected">
<local:MyListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<local:MySlider HorizontalOptions="Fill"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</local:MyListView.ItemTemplate>
</local:MyListView>
</ContentPage.Content>
SlidererRenderer:
public override bool DispatchTouchEvent(MotionEvent e)
{
switch (e.Action)
{
case MotionEventActions.Down:
Parent.Parent.Parent.Parent.Parent.Parent.Parent.RequestDisallowInterceptTouchEvent(true);
break;
case MotionEventActions.Move:
Parent.Parent.Parent.Parent.Parent.Parent.Parent.RequestDisallowInterceptTouchEvent(true);
break;
case MotionEventActions.Up:
break;
default:
break;
}
return base.DispatchTouchEvent(e);
}
你必须调用
RequestDisallowInterceptTouchEvent(true)
方法。在我的代码中,
Parent.Parent.Parent.Parent.Parent.Parent.Parent
指的是
Xamarin.Forms.Platform.Android.PageRenderer
。在
video 中,
Slider
无法正常工作的原因是
page
(在我的代码中是 JustView)阻止了滑块处理拖动手势。
![enter image description here](https://istack.dev59.com/FcjRw.gif)