WPF медиаэлемент - PullRequest
       7

WPF медиаэлемент

0 голосов
/ 03 марта 2010

У меня есть MediaElement, но как я могу вызвать функцию, когда свойство "position" MediaElement изменяется?

Позиция не является зависимой собственностью.

1 Ответ

2 голосов
/ 11 ноября 2010

Вы можете использовать DispatchTimer. Эта статья дает некоторое хорошее представление о том, как заставить это работать. MediaElement и многое другое с WPF .

Вот пример кода, который я взял из проекта, над которым я работаю. Он показывает положение видео с помощью ползунка и позволяет пользователю изменять положение.

Я тоже немного новичок, так что, возможно, что-то из этого не так (не стесняйтесь комментировать проблемы в разделе комментариев:).

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();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...