2010-06-30 2 views
1

J'ai une application WPF avec 3 UserControls différents dans MainWindow et un seul d'entre eux est visible à la fois. C'est comme avoir 3 pages différentes et vous pouvez passer d'une page à l'autre quand vous l'aimez. La première page est comme un écran de démarrage. La deuxième est comme la "vue générale". Et la troisième page montre les détails. La commutation entre eux fonctionne bien avec Storyboard. Je rends simplement la page visible invisible (opacité à zéro) et je la déplace hors de la zone de fenêtre visible et déplace la nouvelle page dans la zone de fenêtre visible pour la rendre visible. Jusqu'ici tout va bien ... (J'espère que vous avez compris ce que je voulais dire ^^)Comment faire de la musique de fond pour mon application WPF?

Maintenant, je veux avoir de la musique de fond qui joue, juste quand la page de détails est affichée. Et seulement alors. Pas lorsque l'utilisateur regarde l'écran de démarrage dans la vue générale.

Je pense que je dois faire quelque chose avec un média. Et démarrez ou arrêtez le médiaelement avec mes storyboards. Mais comment gérer les éléments de média dans mes Storyboards?

Répondre

1

Vous avez la bonne idée:

  • Utilisez un MediaElement dans tout conteneur de présentation (grille, frontière, peu importe) vos coordonnées page est mis en

    <MediaElement x:Name="myMediaElement" />

  • Faites votre story-board ressource qui contient un MediaTimeline

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

  • Je sais avec des boutons et des choses que vous pouvez utiliser les déclencheurs d'événements pour démarrer et arrêter le story-board:

    <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> 
    

Mais je ne sais pas comment vous le faire pour la visibilité le conteneur. IsVisibleChanged vous obligerait à regarder l'argument que vous ne pouvez pas faire en XAML (à ma connaissance). Vous devrez peut-être déclencher l'animation en utilisant un code derrière.

Espérons que cela aide ...

+0

Okay merci. Je vais essayer ça! – user370446

Questions connexes