carousal刷卡时停止并重置视频-Xamarin.forms

carousal刷卡时停止并重置视频-Xamarin.forms,xamarin,xamarin.forms,Xamarin,Xamarin.forms,在我的xamarin.forms应用程序中,我有一个carousal视图,它以MediaElement作为模板。视频从URL播放。我试图实现的是,当用户滑动carousal项目时,我希望当前播放的视频需要停止并播放绑定到该单元的下一个视频,当我们向后滑动时,上一个视频需要重新启动。目前正在播放的视频不会被关闭,当我们滑动下一个视频时,它也会被播放 我怎样才能解决这个问题?感谢您的帮助 带视频的狂欢节视图。 <CarouselView ItemsSource="{Binding }

在我的xamarin.forms应用程序中,我有一个carousal视图,它以
MediaElement
作为模板。视频从URL播放。我试图实现的是,当用户滑动carousal项目时,我希望当前播放的视频需要停止并播放绑定到该单元的下一个视频,当我们向后滑动时,上一个视频需要重新启动。目前正在播放的视频不会被关闭,当我们滑动下一个视频时,它也会被播放

我怎样才能解决这个问题?感谢您的帮助

带视频的狂欢节视图。

<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();
        }
List mediaElements=new List();
私有void MediaElement_BindingContextChanged(对象发送方,事件参数e)
{
var-element=发送方作为MediaElement;
添加(元素);
}
私有void carouselView_PositionChanged(对象发送方,positionchangedventargs e)
{
mediaElements[e.PreviousPosition].Stop();
}

您可以使用位置更改命令| MediaElement上的事件
手动调用
上的
停止
方法
参数。(仅供参考:我们有很多内存/缓存问题w/
MediaElement
,因此我们使用绑定单例的
MediaElement
和/或一个小型缓存的
MediaElement
控件,并将后进先出缓存列表绑定/预缓存到模板,而不是使用Xamarin的逻辑)@Sushingover Hi,感谢您的回复。使用位置更改事件时,如何停止mediaelement?由于mediaelement位于carousal内部,如何调用stop方法?还感谢memmory缓存问题信息。您可以通过
RelativeBindingSourceMode
CarouseView
的XAML中的位置更改命令绑定到其模板的MediaView,命令参数之一是
PreviousItem
,它将有一个MediaView子级,这就是您调用的
Stop
on。相对绑定: