MSDN 教程短片 WPF 17(简单播放器的制作)

WPF做一个简单播放器

WPF中有个MediaPlayer类,它位于System.Windows.Media命名空间下。基于Windows Media Player构建起来的,所以下面做的播放器的前提是 电脑上必须安装Windows Media Player 10或更高版本。

一、打开vs,新建一个应用程序项目。

我们在窗体拖入一个MediaElement控件

<MediaElement Name="mediaElement1" Margin="0,0,0,61">
</MediaElement>

下面我们来触发这个控件的播放。

<Grid.Triggers>
            <EventTrigger SourceName="mediaElement1" 
                          RoutedEvent="MediaElement.Loaded">
                <EventTrigger.Actions>
                    <BeginStoryboard x:Name="sb">
                        <Storyboard>
                            <MediaTimeline 
                                 Source="xbox.wmv"
                                 Storyboard.TargetName="mediaElement1"
                                 RepeatBehavior="Forever"
                                  />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger.Actions>
        </Grid.Triggers>

这里我们在MediaElement.Loaded加载的时候开始显示。

这里要注意Source这里的xbox.wmv放在bin目录下。也可以用..\..\xbox.wmv来读取你放的位置。
这是可以按F5运行。

image

下面我们来增加些功能,比如加个暂停,重新开始,拖拉进度。

拖入两个Button按钮和一个Slider。

<Button Height="23" HorizontalAlignment="Left" Margin="68,0,0,7" 
Name="btnPause" VerticalAlignment="Bottom" Width="75">Pause</Button>
<Button Height="23" Margin="162,0,126,7" Name="btnResume" 
VerticalAlignment="Bottom">Resume</Button>
<Slider Height="21" Margin="43,0,55,37" Name="timeSlider"
 VerticalAlignment="Bottom" />
在Grid.Trigger里添加触发它的事件。
<EventTrigger SourceName="btnPause" RoutedEvent="Button.Click">
      <EventTrigger.Actions>
          <PauseStoryboard BeginStoryboardName="sb" />
      </EventTrigger.Actions>
</EventTrigger>
<EventTrigger SourceName="btnResume" RoutedEvent="Button.Click">
        <EventTrigger.Actions>
           <ResumeStoryboard BeginStoryboardName="sb" />
         </EventTrigger.Actions>
</EventTrigger>
给MediaElement一个MediaOpened事件叫mediaElement1_MediaOpened
和在MediaTimeline里加个事件CurrentTimeInvalidated=
"MediaTimeline_CurrentTimeInvalidated"
后台代码是:
private void mediaElement1_MediaOpened(object sender, RoutedEventArgs e)
{
timeSlider.Maximum=mediaElement1.NaturalDuration.TimeSpan.TotalMilliseconds;
}

private void MediaTimeline_CurrentTimeInvalidated(object sender,EventArgs e)
{
timeSlider.Value = mediaElement1.Position.TotalMilliseconds;
}
这里timeSlider的最大时间点也就是结束点是mediaElement1总的秒数。
 

timeSlider随着mediaElement1的播放而移动。

效果:
image

原文地址:https://www.cnblogs.com/dingli/p/1942823.html