I am trying to control MediaElementusing MediaTimeLine. For this I am using MediaTimeLine's MediaClock'sController.
This won't work
controller.Seek(TimeSpan.FromMilliseconds(5000), TimeSeekOrigin.Duration);
whereas, this will work
controller.Seek(TimeSpan.FromMilliseconds(5000), TimeSeekOrigin.BeginTime);
XAML :
<Grid><Grid.RowDefinitions><RowDefinition Height="214*"/><RowDefinition Height="63*"/></Grid.RowDefinitions><Button x:Name="btnPause" Content="pause" HorizontalAlignment="Left" Margin="209,32,0,10" Grid.Row="1" VerticalAlignment="Top" Width="75" Click="btnPause_Click"/><Button x:Name="btnForward" Content="forward" HorizontalAlignment="Left" Margin="415,32,0,10" Grid.Row="1" VerticalAlignment="Top" Width="75" Click="btnForward_Click"/><Button x:Name="btnReverse" Content="reverse" HorizontalAlignment="Left" Margin="10,32,0,10" Grid.Row="1" VerticalAlignment="Top" Width="75"/><Button x:Name="btnPlay" Content="play" HorizontalAlignment="Left" Margin="289,32,0,10" Grid.Row="1" VerticalAlignment="Top" Width="75" Click="btnPlay_Click"/><Button x:Name="btnStop" Content="stop" HorizontalAlignment="Left" Margin="129,31,0,10" Grid.Row="1" VerticalAlignment="Top" Width="75" Click="btnStop_Click"/><MediaElement x:Name="meMovieScreen" HorizontalAlignment="Center" VerticalAlignment="Top" Width="451" LoadedBehavior="Manual" Margin="12,0,37,0" ScrubbingEnabled="True" MediaOpened="meMovieScreen_MediaOpened"/></Grid>
Code:
public partial class WinClockController : Window { public WinClockController() { InitializeComponent(); } MediaClock clock; MediaTimeline timeline; ClockController controller; private bool boolIsPaused = false; private void Window_Loaded(object sender, RoutedEventArgs e) { timeline = new MediaTimeline(); timeline.Source = new Uri("wpfmedia/wildlife.wmv", UriKind.Relative); clock = (MediaClock)timeline.CreateClock(true); controller = clock.Controller; meMovieScreen.Clock = clock; } private void btnPlay_Click(object sender, RoutedEventArgs e) { if (boolIsPaused) controller.Resume(); else controller.Begin(); } private void btnPause_Click(object sender, RoutedEventArgs e) { controller.Pause(); if (controller.Clock.IsPaused) boolIsPaused = true; } private void btnStop_Click(object sender, RoutedEventArgs e) { controller.Stop(); } private void btnForward_Click(object sender, RoutedEventArgs e) { try { /* won't work no matter what you do */ controller.Seek(TimeSpan.FromMilliseconds(5000), TimeSeekOrigin.Duration); /* this works */ //controller.Seek(TimeSpan.FromMilliseconds(5000), TimeSeekOrigin.BeginTime); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.InnerException.Message); } } private void meMovieScreen_MediaOpened(object sender, RoutedEventArgs e) { timeline.Duration = meMovieScreen.NaturalDuration; } }
Anjum S Khan Admin/Analyst Blog.TrackNifty.com