MP3 не вызывает событие Storyboard.Completed

Я пытаюсь использовать событие Storyboard Completed, чтобы указать, когда закончилось воспроизведение аудиофайла. Однако похоже, что .Net ведет себя по-разному при воспроизведении файлов mp3 и wav, и событие срабатывает только для WAV.

Вот XAML и код, демонстрирующие проблему:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    x:Name="mainWind">
<Window.Resources>
    <Storyboard x:Key="mp3StoryBoard" Completed="Storyboard_Completed">
        <MediaTimeline Source="001.mp3" Storyboard.TargetName="mediaEl" >

        </MediaTimeline>
    </Storyboard>
    <Storyboard x:Key="wavStoryBoard" Completed="Storyboard_Completed">
        <MediaTimeline Source="001.wav" Storyboard.TargetName="mediaEl" >

        </MediaTimeline>
    </Storyboard>
</Window.Resources>
<Grid>
    <MediaElement x:Name="mediaEl" Height="120" HorizontalAlignment="Left" Margin="120,94,0,0" VerticalAlignment="Top" Width="160" />
    <Button Content="Play MP3" Height="23" HorizontalAlignment="Left" Margin="148,260,0,0" Name="btnMP3" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    <Button Content="Play WAV" Height="23" HorizontalAlignment="Left" Margin="267,260,0,0" Name="btnWAV" VerticalAlignment="Top" Width="75" Click="btnWAV_Click" />
</Grid>
</Window>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Storyboard sb = (Storyboard)this.mainWind.Resources["mp3StoryBoard"];
        sb.Begin();

    }

    private void Storyboard_Completed(object sender, EventArgs e)
    {
        MessageBox.Show(" Storyboard finished");
    }


    private void btnWAV_Click(object sender, RoutedEventArgs e)
    {
        Storyboard sb = (Storyboard)this.mainWind.Resources["wavStoryBoard"];
        sb.Begin();
    }
}

}

Буду рад, если у кого-нибудь есть идеи по причине этого и как это преодолеть.


person Doigen    schedule 21.03.2011    source источник


Ответы (2)


У вас нет прикрепленного обработчика событий.

Ты нуждаешься в

sb.Completed +=Storyboard_Completed;

до

person Aleksei Prokopov    schedule 12.08.2011

WPF MediaKit включает замену MediaElement, которая может лучше работать с файлами mp3.

person CodeNaked    schedule 28.03.2011