Когда 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 на 0 мс в событии mediaEnded и воспроизведу, он также будет работать нормально. Буду признателен за любую помощь.





Получите событие Loaded своего пользовательского элемента управления и переместите приведенный ниже код в обработчик события Loaded в коде вашего пользовательского элемента управления за файлом.
videoPlayer.Source = new Uri("C:\\wpf\\bin\\Debug\\data\\start.mp4");
videoPlayer.Play();
После того, как пользовательский элемент управления VideoState правильно загружен как содержимое вашего окна, только тогда вы выполняете дополнительную логику для воспроизведения видео. Надеюсь, это решит проблему черного экрана.