在我的 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();
}
除了 MAUI 中的 CarouselView 之外,还有其他更好的替代方案吗?