Как перенести медиа-элемент wpf в новый родительский элемент без перезапуска медиа? - PullRequest
2 голосов
/ 26 марта 2020

У меня есть медиа-элемент, который воспроизводит файлы MP4 в моем приложении WPF. Я добавил кнопку минимизации, которая переносит элемент мультимедиа на меньший холст (минимизация), но мультимедиа перезапускается при каждом нажатии кнопки. Мне нужно, чтобы он продолжал играть с того места, где остановился. Как мне это сделать? Приостановка мультимедиа перед нажатием кнопки сворачивания позволяет продолжить воспроизведение с того места, на котором она остановилась, но не работает согласованно.

    public void ResumeMethod() 
    {
        Show_MediaScreen.Position = Show_MediaScreen.Position;

        stopWatch.Start();
        dispatcherTimer.Start();

        Show_MediaScreen.Play();


        btnPlayTiny.Visibility = Visibility.Hidden;
        btnPauseTiny.Visibility = Visibility.Visible;
        btnPlay.Visibility = Visibility.Hidden;
        btnPause.Visibility = Visibility.Hidden;
    }
    public void PauseMethod()
    {
        Show_MediaScreen.Position = Show_MediaScreen.Position;

        if (stopWatch.IsRunning)
        {
            stopWatch.Stop();
        }
        // elapsedtimeitem.Items.Add(currentTime);
        btnPauseTiny.Visibility = Visibility.Hidden;
        btnPlayTiny.Visibility = Visibility.Visible;

        btnPlay.Visibility = Visibility.Hidden;
        btnPause.Visibility = Visibility.Hidden;
        Show_MediaScreen.Pause();
    }

private void ShowMediaScreen_MinimizeControl(object sender, RoutedEventArgs e)
    {


        Show_MediaScreen.Height = 200;

        Show_MediaScreen.Width = 250;

        VideoScreen.MouseEnter += new System.Windows.Input.MouseEventHandler(ShowMediaScreen_Hover_ON);
        VideoScreen.MouseLeave += new System.Windows.Input.MouseEventHandler(ShowMediaScreen_Hover_OFF);

        MyCanvas.Visibility = Visibility.Visible;
        MyCanvas_Max.Visibility = Visibility.Collapsed;


        try
        {
            PauseMethod();

            FullSize.Children.Remove(Show_MediaScreen);

            MyCanvas_Mini2.Children.Add(Show_MediaScreen);

            ResumeMethod();


        }
        catch { }



        btnPlay.Visibility = Visibility.Hidden;
        btnPause.Visibility = Visibility.Visible;



    }

1 Ответ

1 голос
/ 26 марта 2020

Я думаю, вы можете использовать свойство MediaElement.Position, чтобы получить или установить текущую позицию прогресса в течение времени воспроизведения мультимедиа.

Как вы сказали, что вы хотите сделать, вы можете попробовать приведенные ниже коды.

Сначала создайте объект TimeSpan для сохранения текущей позиции:

TimeSpan currentPosition = new TimeSpan();

Вам нужно получить позицию, когда пользователь нажимает кнопку минимизации:

currentPosition = YOUR_MEDIA_ELEMENT.Position;

Затем, когда вы переносите медиа-элемент на меньший холст:

YOUR_MEDIA_ELEMENT.Position = currentPosition;

А для получения дополнительной информации о свойстве MediaElement.Position вы можете прочитать документ MSDN .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...