如何在XAML中播放系统声音?

时间:2011-04-15 01:16:41

标签: wpf xaml

这是一个简单的问题,令我惊讶的是,我找不到答案:如何在XAML中播放系统声音?

我有一个事件触发器附加到一个按钮。触发器显示一条消息,我希望它播放Windows Notify声音。我找到了几个关于如何播放声音文件的参考资料,但没有提及如何调用系统声音。

感谢您的帮助!

3 个答案:

答案 0 :(得分:9)

SystemSounds类提供了一些系统声音,它们有Play()方法。要在XAML中使用它,您可能不得不求助于一些糟糕的黑客攻击,实现大量自定义逻辑或使用Blend Interactivity来定义您自己的TriggerAction,它可以使用SystemSound并播放它。

交互方法:

public class SystemSoundPlayerAction : System.Windows.Interactivity.TriggerAction<Button>
{
    public static readonly DependencyProperty SystemSoundProperty =
                    DependencyProperty.Register("SystemSound", typeof(SystemSound), typeof(SystemSoundPlayerAction), new UIPropertyMetadata(null));
    public SystemSound SystemSound
    {
        get { return (SystemSound)GetValue(SystemSoundProperty); }
        set { SetValue(SystemSoundProperty, value); }
    }

    protected override void Invoke(object parameter)
    {
        if (SystemSound == null) throw new Exception("No system sound was specified");
        SystemSound.Play();
    }
}
<Window 
        xmlns:sysmedia="clr-namespace:System.Media;assembly=System"
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity">
        ...
        <Button Content="Test2">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="Click">
                    <i:EventTrigger.Actions>
                        <local:SystemSoundPlayerAction SystemSound="{x:Static sysmedia:SystemSounds.Beep}"/>
                    </i:EventTrigger.Actions>
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Button>

我不知道SystemSounds.Beep是否是你要找的那个。

David Veeneman的注意事项:

对于研究此问题的其他人,答案中提到的Blend Interactivity需要引用 System.Windows.Interactivity.dll ,该文件位于C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries\

答案 1 :(得分:1)

为了完整起见,这里是我用来实现HB问题解决方案的标记。标记在状态栏中显示一条消息并播放System.Asterisk声音。该消息包含在状态栏中名为StackPanel的{​​{1}}中。显示消息,然后在五秒钟内消失。

StatusBarMessagePanel

答案 2 :(得分:0)

在ControlPanel&gt;下声音&gt;听起来你找到了SystemSounds的.wav文件的名称。它们位于Windows \ Media文件夹中。将需求文件作为资源添加到WPF项目中。对于Asterisk-Sound,例如它是'Windows Background.wav'。然后xaml看起来像这样:

<Button.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
        <SoundPlayerAction Source="Sounds\WindowsBackground.wav"/>
    </EventTrigger>
</Button.Triggers>