Как сделать фоновую музыку для моего WPF-приложения? - PullRequest
1 голос
/ 30 июня 2010

У меня есть WPF-приложение с 3 различными пользовательскими элементами управления в главном окне, и только один из них виден в то время.Это как иметь 3 разные страницы, и вы можете переключаться с одной страницы на другую, когда вам это нравится.Первая страница похожа на стартовый экран.Второе похоже на «общий вид».И третья страница показывает детали.Переключение между ними прекрасно работает с раскадровкой.Я просто делаю видимую страницу невидимой (непрозрачность до нуля) и перемещаю ее из видимой области окна и перемещаю новую страницу в видимую область окна и делаю ее видимой.Пока все хорошо ... (надеюсь, вы поняли, что я хотел сказать ^^)

Теперь я хочу, чтобы фоновая музыка воспроизводилась, только когда отображается страница с подробностями.И только потом.Не тогда, когда пользователь смотрит на стартовый экран или на общий вид.

Я думаю, что мне нужно что-то сделать с медиаэлементом.И запустить или остановить медиаэлемент с моими раскадровками.

Но как мне обработать медиаэлементы в раскадровках?

1 Ответ

1 голос
/ 30 июня 2010

У вас есть правильная идея:

  • Используйте MediaElement в любом контейнере макета (сетка, граница и т. Д.), В который вставляется ваша страница сведений

    <MediaElement x:Name="myMediaElement" />

  • Создайте свой ресурс раскадровки, в котором есть MediaTimeline

    <Window.Resources>
    <Storyboard x:Key="PlaySoundStoryboard">
        <MediaTimeline Storyboard.TargetName="myMediaElement" Source="whatever.mp3" />
    </Storyboard>
    

  • Я знаю, с помощью кнопок и вещей, которые выможет использовать триггеры событий, чтобы запускать и останавливать раскадровку:

        <Grid x:Name="LayoutRoot">
        <Grid.Triggers>
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="playbutton">
                <BeginStoryboard Storyboard="{StaticResource PlaySoundStoryboard}" Name="theStoryboard" />
            </EventTrigger>
            <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="stopbutton">
                <StopStoryboard BeginStoryboardName="theStoryboard" />
            </EventTrigger>
        </Grid.Triggers>
        <MediaElement x:Name="myMediaElement" />
        <Button Name="playbutton">play</Button>
        <Button Name="stopbutton">stop</Button>
    </Grid>
    

Но я не знаю, как бы вы сделали это для видимости контейнера.IsVisibleChanged потребует от вас взглянуть на аргумент, который вы не можете использовать в XAML (насколько мне известно).Вам может понадобиться запустить анимацию с помощью кода позади.

Надеюсь, это поможет ...

...