3

我有一個DataTemplate將一個滑塊放入TabbedPage內的ListView中。在Android上,滑塊無法正確移動,從左向右滑動會激活TabbedPage滑動功能。如果滑塊在ListView外部,它可以正常工作。如何防止滑塊的父控件處理拖動手勢?Xamarin在TabbedPage ListForm中滑動滑塊不能正確滑動

方法ViewParent.requestDisallowInterceptTouchEvent(布爾)可能有幫助,但是哪個渲染器等我會這樣做?

Video of issue with the slider

回答

2

創建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; 

TabbedPage的SecondPage:

<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: 
       //This is the core of the problem!!! 
       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.PageRendererSlider不能正確工作在video的原因是page(在我的代碼中是JustView)阻止滑塊處理拖動手勢。

enter image description here

+0

很好的回答!你救了我,把我所有的頭髮都拉出來了,謝謝! –