Если вы поместите Scrollview в пользовательский GridView, когда вы коснетесь этого пользовательского GridView, ScrollView получит фокус, поэтому ваш OnTouchEvent
не может быть выполнен.
Мы можем установить отступ для пользовательского GridView как показано в следующем коде. Чтобы продемонстрировать приведенный выше вывод, я установил для пользовательского цвета фона GridView значение Green, а для ScrollView backgroundColor значение Red
<minitormediamanager:CustomGridView Margin="20,35,20,20" Padding="20" BackgroundColor="Green">
<ScrollView HeightRequest="50" BackgroundColor="Red">
<StackLayout>
<Label Text="By default, a Grid contains one row and one column." />
<Label Text="By default, a Grid contains one row and one column." />
<Label Text="By default, a Grid contains one row and one column." />
<Label Text="By default, a Grid contains one row and one column." />
<Label Text="By default, a Grid contains one row and one column." />
<Label Text="By default, a Grid contains one row and one column." />
<Label Text="By default, a Grid contains one row and one column." />
<Label Text="By default, a Grid contains one row and one column." />
<Label Text="By default, a Grid contains one row and one column." />
</StackLayout>
</ScrollView>
</minitormediamanager:CustomGridView>
Вот мой Grid
код customRenderer.
[assembly: ExportRenderer(typeof(MinitorMediaManager.CustomGridView), typeof(CustomGridViewRenderer))]
namespace MinitorMediaManager.Droid
{
// <Xamarin.Forms.Grid, Android.Views.View>
public class CustomGridViewRenderer : ViewRenderer<MinitorMediaManager.CustomGridView, Android.Views.View>
{
public CustomGridViewRenderer(Context context) : base(context)
{
}
public override bool OnTouchEvent(MotionEvent e)
{
Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxx");
return base.OnTouchEvent(e);
}
}
}
Вы можете увидеть следующий бегущий GIF. Если я прокручиваю или щелкаю ScrollView (красный фон), OnTouchEvent
не будет выполняться, но если я щелкну заполнение GridView (зеленый фон), OnTouchEvent
будет выполнено.
введите описание изображения здесь
В конце концов, если вы хотите добиться события касания, это можно сделать в дочерних элементах управления, не добавляйте GirdView или StackLayout (если у вас нет отступов) ..