簡體   English   中英

如何在Silverlight中連續播放小聲音文件?

[英]How to play small sound file continuously in Silverlight?

我有一個關於Silverlight的SoundPlay動作和性質的兩個問題。 我的情況是這樣的:

我有兩個故事板:第一個故事板具有圖像和聲音文件; 當加載Silverlight應用程序時,聲音會自動開始播放,但是如果有人單擊圖像,聲音文件將停止,第二個情節提要將以新的聲音文件開始。

1)我的第一個問題是,當第二個故事板從第二個聲音文件開始時,如何停止第一個故事板的第一個聲音文件。

2)我的第二個問題是如何連續播放聲音文件; 例如,在Silverlight中,我們可以使用RepeatBehavior =“ Forever”連續播放故事板; 但是我找不到永久或連續播放10秒聲音文件的方法。

注意:我已經附加了一個小的XAML文件來顯示我在說什么。 我還要說明的是,如果不是圖像文件,而是按鈕,那么可以在單擊按鈕后停止第一個音樂文件,並使用新的聲音文件啟動第二個故事板,但是我想使用圖像文件而不是按鈕。 可能嗎? 如果是,該怎么辦?

因此,請回答我以下兩個問題或給大暗示或網站鏈接教程

1)當第二個故事板以第二個聲音文件開始時,如何停止第一個故事板的第一個聲音文件(當clickable元素是圖像而不是按鈕時)2)如何連續播放10秒的聲音文件?

............代碼段......................

XAML ............

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="testPrj.MainPage"
    Width="640" Height="480">
    <UserControl.Resources>
        <Storyboard x:Name="Storyboard1" RepeatBehavior="Forever"/>
        <Storyboard x:Name="Storyboard2"/>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="Red">
        <Button HorizontalAlignment="Left" Margin="212,0,0,111" VerticalAlignment="Bottom" Width="75" Content="Button" Click="onClick"/>
        <MediaElement x:Name="sound2_mp3" Height="0" HorizontalAlignment="Left" Margin="105,230,0,0" VerticalAlignment="Top" Width="0" Source="/sound2.mp3" Stretch="Fill"/>
        <MediaElement x:Name="sound1_mp1" Height="0" HorizontalAlignment="Left" Margin="190,164,0,0" VerticalAlignment="Top" Width="0" Source="/sound1.mp3" Stretch="Fill" AutoPlay="False"/>
    </Grid>
</UserControl>

......

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace testPrj
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            // Required to initialize variables
            InitializeComponent();
        }

        private void onClick(object sender, System.Windows.RoutedEventArgs e)
        {
            Storyboard1.Stop();
            sound2_mp3.Stop();
            sound1_mp1.Play();

        }
    }
}

這兩個問題都解決了:

2)我的第二個問題是如何連續播放聲音文件; 例如,在Silverlight中,我們可以使用RepeatBehavior =“ Forever”連續播放故事板; 但是我找不到永久或連續播放10秒聲音文件的方法。

添加MediaEnded事件處理程序后,問題得到解決。

現在,我更改的XAML代碼是:.. .. ...

<MediaElement x:Name="sound2_mp3" Height="0" HorizontalAlignment="Left" Margin="105,230,0,0" VerticalAlignment="Top" Width="0" Source="/sound2.mp3" Stretch="Fill" DataContext="{Binding}" MediaEnded="start" AutoPlay="True" />
        <MediaElement x:Name="sound1_mp1" Height="0" HorizontalAlignment="Left" Margin="190,164,0,0" VerticalAlignment="Top" Width="0" Source="/sound1.mp3" Stretch="Fill" AutoPlay="False" MediaEnded="start1"/>

……

我的文件背后的代碼有:

    private void start(object sender, RoutedEventArgs e)
    {
        sound2_mp3.Position = TimeSpan.FromSeconds(0);
        sound2_mp3.Play();
    }
    private void start1(object sender, RoutedEventArgs e)
    {
        sound1_mp1.Position = TimeSpan.FromSeconds(0);
        sound1_mp1.Play();
    }

我的第一個問題是:

1)當第二個故事板以第二個聲音文件開頭時,如何停止第一個故事板的第一個聲音文件(當clickable元素是圖像而不是按鈕時)

這是可行的並得到解決。 我不知道為什么我沒有調查和試驗圖像元素的事件類型。 因此,得出的結論是:如果可點擊元素是圖像,則可以觸發事件。 例如在下面的代碼段中,我正在使用MouseLeftButtonUp事件。

XAML

    <Image HorizontalAlignment="Left" Margin="88,239,0,118" Width="95" Source="me1.png" Stretch="Fill" MouseLeftButtonUp="imgGotClicked"/>    

文件后面的代碼

    private void imgGotClicked(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
          MessageBox.Show("Hello World!");
          Storyboard1.Stop();
          Storyboard2.Begin();
    }

因此,問題1和問題2都得到解決。 該線程的問題已解決。 因此,應將其關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM