Mega Code Archive

 
Categories / VB.Net / 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.vb Imports System Imports System.Windows Imports System.Windows.Input Imports System.Windows.Media Imports System.Windows.Media.Animation Namespace WpfApplication1   Public Partial Class Window1     Inherits Window     Private ignoreValueChanged As Boolean = False     Public Sub New()       InitializeComponent()     End Sub     Private Sub MediaOpened(sender As Object, e As EventArgs)       sldPosition.Maximum = meMediaElement.NaturalDuration.TimeSpan.TotalMilliseconds     End Sub     Private Sub Storyboard_Changed(sender As Object, e As EventArgs)       Dim clockGroup As ClockGroup = TryCast(sender, ClockGroup)       Dim mediaClock As MediaClock = TryCast(clockGroup.Children(0), MediaClock)       If mediaClock.CurrentProgress.HasValue Then         ignoreValueChanged = True         sldPosition.Value = meMediaElement.Position.TotalMilliseconds         ignoreValueChanged = False       End If     End Sub     Private Sub sldPosition_ValueChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double))       If ignoreValueChanged Then         Return       End If       Storyboard.Seek(Panel, TimeSpan.FromMilliseconds(sldPosition.Value), TimeSeekOrigin.BeginTime)     End Sub   End Class End Namespace