我遇到了这个问题多次,但直到我现在正在做的任务,它才让我真正担心起来。现在我真的需要移除自动播放,因为这个音频必须仅在用户交互时才能播放,而不是在页面加载时就开始播放。
MediaPlayer的CurrentState属性是只读的,不能在屏幕加载时更改或分配。这非常恼人,我不知道为什么它不起作用。即使设置了"AutoPlay="false"",声音仍会在页面加载时播放。
我的元素由于只需播放声音而不需要任何人看到它,所以是不可见的。如果你有其他方法,请在评论中建议,我会尝试一下。
MediaPlayer的CurrentState属性是只读的,不能在屏幕加载时更改或分配。这非常恼人,我不知道为什么它不起作用。即使设置了"AutoPlay="false"",声音仍会在页面加载时播放。
我的元素由于只需播放声音而不需要任何人看到它,所以是不可见的。如果你有其他方法,请在评论中建议,我会尝试一下。
<xct:MediaElement x:Name="mediaPlayer"
Source="{Binding WordSoundSource}"
IsVisible="false"
AutoPlay="false"/>
更新
如果我在构造函数中加入mediaPlayer.Stop()
来在开始时停止元素播放,那么用户点击播放事件时将不会播放任何内容,这非常令人烦恼。
以下是我如何处理用户点击图像的mediaPlayer.Play()
,该图像具有Image.GestureRecognizers
&&TapGestureRecognizer
<Image Source="sound_icon.png"
VerticalOptions="CenterAndExpand"
HorizontalOptions="EndAndExpand"
HeightRequest="40"
WidthRequest="40"
Margin="0, 10, 80, 0">
<Image.GestureRecognizers>
<TapGestureRecognizer x:Name="ReplaySound"
NumberOfTapsRequired="1"
Tapped="ReplaySound_Tapped"/>
</Image.GestureRecognizers>
</Image>
private void ReplaySound_Tapped(object sender, EventArgs e)
{
if (mediaPlayer.CurrentState == MediaElementState.Stopped ||
mediaPlayer.CurrentState == MediaElementState.Paused)
{
mediaPlayer.Play();
}
}
GitHub上还有一个关于这个问题的帖子issues #1715,但它已经发布了近一年时间...我在想这是否是同一个问题?
提前致谢。