我在Silverlight for Windows Phone 7中遇到MediaElement
控件有困难。我的目标是在用户按下按钮时播放两个音调。我想出的这样做的方法是每个音调都有一个MediaElement
。 (有可能有更好的方法吗?)
<phone:PhoneApplicationPage
x:Class="MediaElementTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<StackPanel x:Name="LayoutRoot" Background="Transparent">
<MediaElement
x:Name="firstTone"
MediaEnded="firstTone_MediaEnded"
Source="{Binding FirstTone}" />
<MediaElement
x:Name="secondTone"
Source="{Binding SecondTone}" />
<Button Content="Play" Click="Button_Click" />
</StackPanel>
</phone:PhoneApplicationPage>
代码隐藏:
public partial class MainPage : PhoneApplicationPage
{
public Uri FirstTone
{
get
{
return new Uri("A.mp3", UriKind.Relative);
}
}
public Uri SecondTone
{
get
{
return new Uri("B.mp3", UriKind.Relative);
}
}
public MainPage()
{
InitializeComponent();
LayoutRoot.DataContext = this;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
firstTone.Stop();
secondTone.Stop();
firstTone.Play();
}
private void firstTone_MediaEnded(object sender, RoutedEventArgs e)
{
secondTone.Play();
}
}
单击按钮时,不会播放音调。为什么是这样?我做错了什么?
答案 0 :(得分:1)
答案 1 :(得分:1)
答案 2 :(得分:1)
MediaElement旨在一次播放一个媒体。正如其他人所提到的,使用SoundEffect或SoundEffectInstance类来发现同声音。您一次最多可以播放16个SoundEffects。
此外,如果您不小心,使用MediaElement可能会导致认证问题。例如,如果在XAML中设置MediaElement源,则会导致手机上当前正在播放的媒体停止播放。除非您要求用户停止播放媒体,否则您将无法通过认证。
答案 3 :(得分:0)
答案 4 :(得分:0)
我从来没有能够在电话应用上使用多个MediaElements。我看到和你一样的问题,我不能播放媒体。
我相信你只能有一个活跃的,但我没有看到这方面的文件。我解决它的方法是在App.XAML中定义一个MediaElement
<!--Application Resources-->
<Application.Resources>
<MediaElement
x:Key='mediaElement' AutoPlay='True' Source='/music/GroovinIntro.wav'/>
</Application.Resources>
然后将其作为Application类的属性公开。
public MediaElement MediaElement
{
get
{
return this.Resources["mediaElement"] as MediaElement;
}
}
然后像这样调用MediaElement。
App.Current.MediaElement.Source = new Uri(_musicLocation, UriKind.Relative);