0

我正在使用 MediaElement 类在单击按钮时播放简单的声音。除非我双击它,否则这对我来说很好。在第二次点击时,我希望旧声音停止播放并重新启动声音。但是停止方法不起作用:

    public static MediaElement SoundDelete;
    public static void PlaySoundCash()
    {
        if (SessionHelper.getConfig("SoundDelete") == "true")
        {
            System.Diagnostics.Debug.WriteLine(SoundDelete.Position.ToString());
            SoundDelete.Stop(); //dosn't work
            SoundDelete.Position = new System.TimeSpan(0,0,0,0,0); //dosn't work
            System.Diagnostics.Debug.WriteLine(SoundDelete.Position.ToString());
            SoundDelete.Play();
        }
    }

在控制台中,时间跨度永远不会为 0。我怎样才能让声音从头开始播放?

4

1 回答 1

1

我遇到了完全相同的问题。事实证明,将 MediaElement 添加到可视树将允许您使用此额外功能。

将我的 MediaElements 添加到我的基本 Grid 的子项中解决了这些问题。

例如:

C#

public static MediaElement SoundDelete;

private void MediaInit()
{
    // ...
    // load your sound file into SoundDelete
    // ...
    BaseGrid.Children.Add(SoundDelete);
}
public static void PlaySoundCash()
{
    System.Diagnostics.Debug.WriteLine(SoundDelete.Position.ToString());
    SoundDelete.Stop();
    SoundDelete.Position = new System.TimeSpan.Zero;
    System.Diagnostics.Debug.WriteLine(SoundDelete.Position.ToString());
    SoundDelete.Play();
}

或在 XAML 中:

<Grid Name="BaseGrid">
    <MediaElement Name="SoundDelete" Source="path_to_your_sound_file.mp3" />
</Grid>
于 2012-12-17T04:51:06.033 回答