Mega Code Archive

 
Categories / C# / WPF
 

Play a Media File

<Window x:Class="WpfApplication1.Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     Title="WPF" Height="450" Width="300">     <StackPanel x:Name="Panel">         <StackPanel.Triggers>             <EventTrigger RoutedEvent="Button.Click" SourceName="btnPlay">                 <EventTrigger.Actions>                     <BeginStoryboard Name="ClockStoryboard">                         <Storyboard x:Name="Storyboard"  SlipBehavior="Slip"                                     CurrentTimeInvalidated="Storyboard_Changed">                             <MediaTimeline BeginTime="0" Source="c:\a.avi"                                   Storyboard.TargetName="meMediaElement"                                  RepeatBehavior="Forever" />                         </Storyboard>                     </BeginStoryboard>                 </EventTrigger.Actions>             </EventTrigger>             <EventTrigger RoutedEvent="Button.Click" SourceName="btnPause">                 <EventTrigger.Actions>                     <PauseStoryboard BeginStoryboardName="ClockStoryboard" />                 </EventTrigger.Actions>             </EventTrigger>             <EventTrigger RoutedEvent="Button.Click" SourceName="btnResume">                 <EventTrigger.Actions>                     <ResumeStoryboard BeginStoryboardName="ClockStoryboard" />                 </EventTrigger.Actions>             </EventTrigger>             <EventTrigger RoutedEvent="Button.Click" SourceName="btnStop">                 <EventTrigger.Actions>                     <StopStoryboard BeginStoryboardName="ClockStoryboard" />                 </EventTrigger.Actions>             </EventTrigger>             <EventTrigger RoutedEvent="Slider.PreviewMouseLeftButtonDown"                                SourceName="sldPosition" >                 <PauseStoryboard BeginStoryboardName="ClockStoryboard" />             </EventTrigger>             <EventTrigger RoutedEvent="Slider.PreviewMouseLeftButtonUp"                                SourceName="sldPosition" >                 <ResumeStoryboard BeginStoryboardName="ClockStoryboard" />             </EventTrigger>         </StackPanel.Triggers>         <MediaElement Name="meMediaElement" HorizontalAlignment="Center"                       Margin="5" MinHeight="300" Stretch="Fill"                       MediaOpened="MediaOpened" />         <Button Content="_Play" Name="btnPlay" />         <Button Content="P_ause" Name="btnPause" />         <Button Content="_Resume" Name="btnResume" />         <Button Content="_Stop" Name="btnStop" />         <Slider HorizontalAlignment="Center" Margin="5"                  Name="sldPosition" Width="250"                 ValueChanged="sldPosition_ValueChanged">         </Slider>         <TextBlock Text="Volume:"/>         <Slider Minimum="0" Maximum="1" TickFrequency="0.1" TickPlacement="TopLeft" Value="{Binding ElementName=meMediaElement, Path=Volume, Mode=TwoWay}" />         <TextBlock Text="Balance:"/>         <Slider Minimum="-1" Maximum="1" TickFrequency="0.2" TickPlacement="TopLeft" Value="{Binding ElementName=meMediaElement, Path=Balance, Mode=TwoWay}" />     </StackPanel> </Window> //File:Window.xaml.cs using System; using System.Windows; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; namespace WpfApplication1 {     public partial class Window1 : Window     {         bool ignoreValueChanged = false;         public Window1()         {             InitializeComponent();         }         private void MediaOpened(object sender, EventArgs e)         {             sldPosition.Maximum = meMediaElement.NaturalDuration.TimeSpan.TotalMilliseconds;         }         private void Storyboard_Changed(object sender, EventArgs e)         {             ClockGroup clockGroup = sender as ClockGroup;             MediaClock mediaClock = clockGroup.Children[0] as MediaClock;             if (mediaClock.CurrentProgress.HasValue){                 ignoreValueChanged = true;                 sldPosition.Value = meMediaElement.Position.TotalMilliseconds;                 ignoreValueChanged = false;             }         }         private void sldPosition_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e){             if (ignoreValueChanged)             {                 return;             }             Storyboard.Seek(Panel,TimeSpan.FromMilliseconds(sldPosition.Value),TimeSeekOrigin.BeginTime);         }     } }