Как воспроизвести системный звук в XAML? - PullRequest
6 голосов
/ 15 апреля 2011

Вот простой вопрос, к которому, к моему удивлению, я не могу найти ответ: Как воспроизвести системный звук в XAML?

У меня есть кнопка события, прикрепленная к кнопке. Триггер отображает сообщение, и я хочу, чтобы он воспроизводил звук уведомления Windows. Я нашел несколько ссылок о том, как воспроизводить звук файлов , но ничего не говорится о том, как вызывать системный звук.

Спасибо за вашу помощь!

Ответы [ 3 ]

9 голосов
/ 15 апреля 2011

Класс 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. )

Примечание Дэвида Венемана:

Для других, исследующих эту проблему, интерактивная смесь, упомянутая в ответе, требует ссылки на System.Windows.Interactivity.dll , который находится в C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries\

1 голос
/ 15 апреля 2011

Для полноты, вот разметка, которую я использовал для реализации решения проблемы HB. Разметка показывает сообщение в строке состояния и воспроизводит звук System.Asterisk. Сообщение содержится в StackPanel с именем StatusBarMessagePanel в строке состояния. Сообщение показывается, затем исчезает в течение пяти секунд.

<Button ...>

    <!-- Shows, then fades status bar message. -->
    <Button.Triggers>
        <EventTrigger RoutedEvent="Button.Click">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation From="1.0" To="0.0" Duration="0:0:5"      
                                Storyboard.TargetName="StatusBarMessagePanel" 
                                Storyboard.TargetProperty="Opacity"/>
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Button.Triggers>

    <!-- Note that the following markup uses the custom SystemSoundPlayerAction 
    class, which is found in the Utility folder of this project. -->

    <!-- Plays the System.Asterisk sound -->
    <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>
0 голосов
/ 19 апреля 2018

В ControlPanel> Sound> Sounds вы найдете имена WAV-файлов SystemSounds.Они расположены в папке Windows \ Media.Добавьте файл вашего запроса в качестве ресурса в ваш проект WPF.Для Звездочки-Звука, например, это «Windows Background.wav».Тогда xaml может выглядеть так:

<Button.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
        <SoundPlayerAction Source="Sounds\WindowsBackground.wav"/>
    </EventTrigger>
</Button.Triggers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...