如何阻止网格控件内的 VideoView 控件使用 LibVLCSharp 库打开新的 window?
How do I stop VideoView control inside a Grid control from opening a new window using LibVLCSharp library?
我正在使用 LibVLCSharp.WPF
通过 VideoView
控件播放视频。我在 ViewModel
中绑定了 MediaPlayer 和 Visibility。我可以让它播放视频,但不是嵌入它创建的 Grid 控件中,而是打开一个新的 window 并在那里播放视频。我已经搜索并发现存在空域问题,但也许我做错了什么,阻止视频在网格内播放,就像将图像放在图像控件中一样。
播放器位于 MainWindow 内的 UserControl 内。
XAML
<Grid>
<media:VideoView x:Name="MediaPlayer"
VerticalAlignment="Center"
HorizontalAlignment="Center"
MediaPlayer="{Binding MyMediaPlayer}"
Visibility="{Binding IsMediaPlayerVisible, Converter={StaticResource VisConverter}}"/>
</Grid>
视图模型
void StartVideo()
{
IsMediaPlayerVisible = true;
Core.Initialize();
using (_libVLC = new LibVLC())
{
MyMediaPlayer = new MediaPlayer(_libVLC);
MyMediaPlayer.Media = new Media(_libVLC, new Uri(@"path\to\media\file"));
MyMediaPlayer.Play();
}
}
我可以像网格中的图像控件一样嵌入 VideoView
吗?
请始终分享 完整 最小示例。您的 Q 缺少大部分代码。
LibVLC 将在提供的 Window(例如此处的 VideoView)未准备好或未完全初始化时创建一个新的 Windows。
根据经验,始终从官方 libvlcsharp 示例开始。 https://code.videolan.org/videolan/LibVLCSharp/-/blob/3.x/samples/LibVLCSharp.WPF.Sample/Controls.xaml.cs
public Controls(Example1 Parent)
{
parent = Parent;
InitializeComponent();
// we need the VideoView to be fully loaded before setting a MediaPlayer on it.
parent.VideoView.Loaded += VideoView_Loaded;
PlayButton.Click += PlayButton_Click;
StopButton.Click += StopButton_Click;
Unloaded += Controls_Unloaded;
}
private void VideoView_Loaded(object sender, RoutedEventArgs e)
{
_libVLC = new LibVLC(enableDebugLogs: true);
_mediaPlayer = new MediaPlayer(_libVLC);
parent.VideoView.MediaPlayer = _mediaPlayer;
}
我正在使用 LibVLCSharp.WPF
通过 VideoView
控件播放视频。我在 ViewModel
中绑定了 MediaPlayer 和 Visibility。我可以让它播放视频,但不是嵌入它创建的 Grid 控件中,而是打开一个新的 window 并在那里播放视频。我已经搜索并发现存在空域问题,但也许我做错了什么,阻止视频在网格内播放,就像将图像放在图像控件中一样。
播放器位于 MainWindow 内的 UserControl 内。
XAML
<Grid>
<media:VideoView x:Name="MediaPlayer"
VerticalAlignment="Center"
HorizontalAlignment="Center"
MediaPlayer="{Binding MyMediaPlayer}"
Visibility="{Binding IsMediaPlayerVisible, Converter={StaticResource VisConverter}}"/>
</Grid>
视图模型
void StartVideo()
{
IsMediaPlayerVisible = true;
Core.Initialize();
using (_libVLC = new LibVLC())
{
MyMediaPlayer = new MediaPlayer(_libVLC);
MyMediaPlayer.Media = new Media(_libVLC, new Uri(@"path\to\media\file"));
MyMediaPlayer.Play();
}
}
我可以像网格中的图像控件一样嵌入 VideoView
吗?
请始终分享 完整 最小示例。您的 Q 缺少大部分代码。
LibVLC 将在提供的 Window(例如此处的 VideoView)未准备好或未完全初始化时创建一个新的 Windows。
根据经验,始终从官方 libvlcsharp 示例开始。 https://code.videolan.org/videolan/LibVLCSharp/-/blob/3.x/samples/LibVLCSharp.WPF.Sample/Controls.xaml.cs
public Controls(Example1 Parent)
{
parent = Parent;
InitializeComponent();
// we need the VideoView to be fully loaded before setting a MediaPlayer on it.
parent.VideoView.Loaded += VideoView_Loaded;
PlayButton.Click += PlayButton_Click;
StopButton.Click += StopButton_Click;
Unloaded += Controls_Unloaded;
}
private void VideoView_Loaded(object sender, RoutedEventArgs e)
{
_libVLC = new LibVLC(enableDebugLogs: true);
_mediaPlayer = new MediaPlayer(_libVLC);
parent.VideoView.MediaPlayer = _mediaPlayer;
}