我是Xamarin的新手。我正在尝试使用5个自定义的水平列表视图在Xamarin表单中创建示例(我已经使用渲染器在不同的平台上实现了相同的功能。当我在屏幕上只有两个这样的控件时,它可以完美地工作(水平滚动)。 5我必须将这些控件添加到垂直方向的ScrollView中,这样我才能看到所有控件。这样做时,我只能垂直滚动页面,而不能水平滚动单个控件(水平列表视图)。
此问题仅适用于Android。在Windows Phone中可以正常工作。
下面是我的代码:
<ScrollView Orientation="Vertical">
<StackLayout Padding="5, 25" Orientation="Vertical" VerticalOptions="FillAndExpand">
<Image Source ="label_entertainment.png" HorizontalOptions="Start"/>
<local:HorizontalListViewEntertainment x:Name="entertainmentView" Items="{Binding Entertainment}" HeightRequest="198"/>
<Image Source ="label_music.png" HorizontalOptions="Start"/>
<local:HorizontalListViewMusic x:Name="musicListView" Items="{Binding Music}" HeightRequest="198"/>
<Image Source ="label_movies.png" HorizontalOptions="Start"/>
<local:HorizontalListViewMovies x:Name="movieListView" Items="{Binding Movies}" HeightRequest="198"/>
<Image Source ="label_celebrities.png" HorizontalOptions="Start"/>
<local:HorizontalListViewCelebrities x:Name="celebritiesListView" Items="{Binding Celebrities}" HeightRequest="198"/>
<Image Source ="label_style.png" HorizontalOptions="Start"/>
<local:HorizontalListViewStyle x:Name="styleListView" Items="{Binding Celebrities}" HeightRequest="198"/>
</StackLayout>
</ScrollView>
我在这里找到了解决方案。但是,由于我没有内部滚动视图,因此在我的情况下不起作用。请帮忙。谢谢!
我找到了解决方案。我只需要将以下代码添加到android中horizontallistviews的CustomRenderer中。
public override bool DispatchTouchEvent(MotionEvent e)
{
switch (e.Action)
{
case MotionEventActions.Down:
StartX = e.RawX;
StartY = e.RawY;
this.Parent.RequestDisallowInterceptTouchEvent(true);
break;
case MotionEventActions.Move:
if (IsHorizontal * Math.Abs(StartX - e.RawX) < IsHorizontal * Math.Abs(StartY - e.RawY))
this.Parent.RequestDisallowInterceptTouchEvent(false);
break;
case MotionEventActions.Up:
this.Parent.RequestDisallowInterceptTouchEvent(false);
break;
}
return base.DispatchTouchEvent(e);
}
推荐了这个
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句