无法使用多个按钮播放Windows Phone

时间:2013-09-17 23:55:20

标签: c# xaml button mediaelement

以下是三个标准buttons,其中包含xaml中的media元素:

<Button Content="Sound1"
            Click="Button_Click1"
            HorizontalAlignment="Center"  
            VerticalAlignment="Top"/>
    <MediaElement x:Name="PlaySound1"
                    Grid.Row="1"
                    />

    <Button Content="Sound2" 
            Click="Button_Click2"
            HorizontalAlignment="Center"  
            VerticalAlignment="Top" 
            Margin="177,72,177,0"
            Width="126"/>
    <MediaElement x:Name="PlaySound2"
                    Grid.Row="1"
                    />

    <Button Content="Sound3" 
            Click="Button_Click3"
            HorizontalAlignment="Center"
            VerticalAlignment="Top"
            Margin="177,149,177,0"                      
            Width="126" />
    <MediaElement x:Name="PlaySound3"
                    Grid.Row="1"
                    />

这是我使用的简单代码,当我尝试播放第三个按钮时,它不起作用,我点击所有组合中的buttons(首先是button2,button3和button1)并且它不起作用。

private void Button_Click1(object sender, RoutedEventArgs e)
{
    PlaySound1.Source = new Uri("sound.wma", UriKind.Relative);
    PlaySound1.Stop();
    PlaySound1.Play();
}

private void Button_Click2(object sender, RoutedEventArgs e)
{
    PlaySound2.Source = new Uri("sound2.wma", UriKind.Relative);
    PlaySound2.Stop();
    PlaySound2.Play();

}

private void Button_Click3(object sender, RoutedEventArgs e)
{
    PlaySound3.Source = new Uri("sound3.wma", UriKind.Relative);
    PlaySound3.Stop();
    PlaySound3.Play();
}

使用多个声音的多个按钮的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

默认情况下,当您添加.Source时,它将播放声音。并且,默认情况下,Stop不起作用。在初始化中,将.LoadedBehavior设置为Manual并分配源。

    protected override void OnInitialized(EventArgs e)
    {
        PlaySound1.LoadedBehavior = MediaState.Manual;
        PlaySound2.LoadedBehavior = MediaState.Manual;
        PlaySound3.LoadedBehavior = MediaState.Manual;
        PlaySound1.Source = new Uri("aah-01.wav", UriKind.Relative);
        PlaySound2.Source = new Uri("crowd-groan.wav", UriKind.Relative);
        PlaySound3.Source = new Uri("laugh-01.wav", UriKind.Relative);

        base.OnInitialized(e);
    }

然后你可以

    private void Button_Click1(object sender, RoutedEventArgs e)
    {
        PlaySound1.Stop();
        PlaySound1.Play();
    }

答案 1 :(得分:0)

您可以尝试这样的事情

private void Click(object sender, EventArgs e)
{
Button button = sender as Button;
switch(button.Name)
{
case "sound1":
PlaySound1.Stop();
PlaySound1.Source= new Uri("sound.wma",UriKind.Relative);
PlaySound1.Play();
break;
case "sound2":
PlaySound2.Stop();
PlaySound2.Source= new Uri("sound2.wma",UriKind.Relative);
PlaySound2.Play();
break;
case "sound3":
PlaySound3.Stop();
PlaySound3.Source= new Uri("sound3.wma",UriKind.Relative);
PlaySound3.Play();
break;
}
}