问题描述
在我的xamarin.forms应用程序中,我有一个带有MediaElement
作为模板的圆盘视图。视频从URL播放。我要实现的目标是,当用户滑动旋转物品时,我希望当前正在播放的视频需要停止并播放绑定到该单元格的下一个视频,而当我们向后滑动时,需要重新启动上一个视频。目前,正在播放的视频不会关闭,当我们滑动下一个视频时,它也会随之播放。
我该如何解决?任何帮助表示赞赏。
带有视频的轮播视图。
<CarouselView ItemsSource="{Binding }" >
<CarouselView.ItemTemplate>
<DataTemplate>
<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" >
<MediaElement Autoplay="True" Aspect="AspectFill"
Source="{Binding Video}" /
</StackLayout>
</DataTemplate>
</CarouselView.ItemTemplate>
</CarouselView>
解决方法
我们可以使用BindingContextChanged和PositionChanged事件。
<CarouselView ItemsSource="{Binding }" PositionChanged="carouselView_PositionChanged">
<CarouselView.ItemTemplate>
<DataTemplate>
<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" >
<MediaElement AutoPlay="True" Aspect="AspectFill"
Source="{Binding Video}" BindingContextChanged="MediaElement_BindingContextChanged" />
</StackLayout>
</DataTemplate>
</CarouselView.ItemTemplate>
</CarouselView>
在后面的代码中
List<MediaElement> mediaElements = new List<MediaElement>();
private void MediaElement_BindingContextChanged(object sender,EventArgs e)
{
var element = sender as MediaElement;
mediaElements.Add(element);
}
private void carouselView_PositionChanged(object sender,PositionChangedEventArgs e)
{
mediaElements[e.PreviousPosition].Stop();
}