开发者

WPF mediaelement

I have a MediaElement, but how can I call a function when the property "position" of MediaElement changes?

Position is not a开发者_JS百科 DependencyProperty.


You can use a DispatchTimer. This article provides some good insight on how to get this working. MediaElement and More with WPF.

Here is some sample code that I took from a project I'm working on. It shows the position of the video using a slider control and allows the user to change the position.

I'm a bit of a newbie too, so it is possible that some of it is wrong (feel free to comment on problems in the comments section :).

private DispatcherTimer mTimer;
private bool mIsDragging = false;
private bool mTick = false;
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    medPlayer.Play();
    medPlayer.Stop();
    mTimer = new DispatcherTimer();
    mTimer.Interval = TimeSpan.FromMilliseconds(100);
    mTimer.Tick += new EventHandler(mTimer_Tick);
    mTimer.Start();
}
void mTimer_Tick(object sender, EventArgs e)
{
    if (!mIsDragging)
    {
        try
        {
            mTick = true;
            sldPosition.Value = medPlayer.Position.TotalMilliseconds;
        }
        finally
        {
            mTick = false;
        }
    }
}
private void sldPosition_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
{
    mIsDragging = true;
    medPlayer.Pause();
}
private void sldPosition_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
{
    mIsDragging = false;
    if (chkPlay.IsChecked.Value)
        medPlayer.Play();
}
private void sldPosition_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    var pos = TimeSpan.FromMilliseconds(e.NewValue);
    lblPosition.Content = string.Format("{0:00}:{1:00}", pos.Minutes, pos.Seconds);
    if (!mTick)
    {
        medPlayer.Position = TimeSpan.FromMilliseconds(sldPosition.Value);
        if (medPlayer.Position == medPlayer.NaturalDuration.TimeSpan)
        {
            chkPlay.IsChecked = false;
            medPlayer.Stop();
        }
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜