Используя пользовательский рендер, можно отключить жест смахивания CarouselPage
на iOS
, например, так:
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(CarouselPage), typeof(CustomCarouselPageRenderer))]
namespace App.iOS
{
public class CustomCarouselPageRenderer : CarouselPageRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
UIView view = this.NativeView;
UIScrollView scrollView = (UIKit.UIScrollView)view.Subviews[0];
scrollView.ScrollEnabled = false;
}
}
}
Как сделать то же самое на Android?
using Android.Content;
using XamFormsApp.Droid.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(CarouselPage), typeof(CustomCarouselPageRenderer))]
namespace StixApp.Droid.Renderers
{
public class CustomCarouselPageRenderer : VisualElementRenderer<CarouselPage>
{
public CustomCarouselPageRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<CarouselPage> e)
{
base.OnElementChanged(e);
var view = this.RootView;
X
X
}
}
}
Похоже, что нет доступа к Subviews
таким же образом. Можно получить доступ к Children
, как это так
Android.Views.View view = (Android.Views.View)GetChildAt(i);
Как узнать, какой Child
является ScrollView
, если есть?
Использование цикла для проверки этого, например,
for (int i = 0; i < ChildCount; ++i)
{
Android.Views.View view = (Android.Views.View)GetChildAt(i);
if (view is ScrollView)
{
}
}
Выводит следующее: " Данное выражение никогда не относится к указанному (ScrollView
) типу "
Так! Как отключить CarouselPage
пролистывание / прокрутку, как это сделано в iOS
довольно элегантно?
ОБНОВЛЕНИЕ : см. образец решения .