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