c # wpf MediaElement черная вспышка - PullRequest
0 голосов
/ 08 мая 2018

Когда MediaElement начинает воспроизводить видео, оно на мгновение показывается черной рамкой. Вот код:

<Window x:Class="MediaElementTest.MainWindow" /* */
        Title="MainWindow" Height="350" Width="525" Background="Red">
    <Grid>
        <ContentControl x:Name="contentControl"/>
    </Grid>
</Window> 

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        NextState();
    }

    public void NextState()
    {
        var content = new VideoState();
        contentControl.Content = content;
    }
}

И

<UserControl x:Class="MediaElementTest.VideoState" /* */
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <MediaElement x:Name="videoPlayer" MediaEnded="videoPlayer_MediaEnded" LoadedBehavior="Manual" />
    </Grid>
</UserControl>

public partial class VideoState : UserControl
{
    public VideoState()
    {
        InitializeComponent();
        videoPlayer.Source = new Uri("C:\\wpf\\bin\\Debug\\data\\start.mp4");
        //videoPlayer.Position = TimeSpan.FromMilliseconds(100); //!!! WORKS FINE WITH IT
        videoPlayer.Play();
    }

    private void videoPlayer_MediaEnded(object sender, RoutedEventArgs e)
    {
        videoPlayer.Source = null;
        videoPlayer = null;
        GC.Collect();

        MainWindow wnd = (MainWindow)Application.Current.MainWindow;
        wnd.NextState();
    }
}

Если я установлю videoPlayer.Position как 100 миллисекунд, он будет работать нормально. Как я могу избавиться от этой черной рамки. Я попытался установить ScrubbingEnabled="true" и сделать что-то вроде:

videoPlayer.Play();
videoPlayer.Pause();
videoPlayer.Play();

Но разницы нет, и всплывающее окно все еще появляется. Если я установлю videoPlayer.Position в 0ms для события mediaEnded и воспроизведу, то он также будет работать нормально. Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 09 мая 2018

Получите событие Loaded вашего пользовательского элемента управления и переместите приведенный ниже код в обработчик события Loaded в коде вашего пользовательского элемента управления за файлом

videoPlayer.Source = new Uri("C:\\wpf\\bin\\Debug\\data\\start.mp4");
videoPlayer.Play();

Как только пользовательский элемент управления VideoState правильно загружен как содержимоеваше окно, только тогда вы выполните дальнейшую логику для воспроизведения видео.Я надеюсь, что это решит проблему черного экрана.

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