MainWindowViewModel.cs
Код: Выделить всё
public partial class MainWindowViewModel : ViewModelBase
{
[ObservableProperty] private ViewModelBase currentViewModel = new FirstViewModel();
[RelayCommand]
void GoTo(string viewName)
{
this.CurrentViewModel = viewName switch
{
"First" => new FirstViewModel(),
"Second" => new SecondViewModel(),
_ => throw new ArgumentOutOfRangeException()
};
}
}
Код: Выделить всё
FirstViewModel.cs
Код: Выделить всё
public partial class FirstViewModel : ViewModelBase
{
private LibVLC MainLibVLC { get; set; }
public MediaPlayer MainMediaPlayer { get; set; }
[ObservableProperty] string movieUrl = "";
public FirstViewModel()
{
MainLibVLC = new();
this.MainMediaPlayer = new(MainLibVLC);
this.MovieUrl = Path.Combine(Environment.CurrentDirectory, "sample.mp4");
}
[RelayCommand]
public void Play()
{
var media = new Media(MainLibVLC, new Uri(this.MovieUrl));
this.MainMediaPlayer.Play(media);
}
[RelayCommand]
public void Stop()
{
this.MainMediaPlayer.Stop();
}
}
Код: Выделить всё

Проблема
Когда у VedioView есть контент, и я пытаюсь перейти ко второму представлению, я получаю следующую ошибку. Из Avalonia.Base
Элемент управления не принадлежит визуальному дереву.
Трассировка стека
Код: Выделить всё
at Avalonia.VisualExtensions.PointToScreen(Visual visual, Point point)
at LibVLCSharp.Avalonia.VideoView.UpdateOverlayPosition()
at LibVLCSharp.Avalonia.VideoView.b__16_1(Object _, EventArgs _)
at Avalonia.Layout.Layoutable.LayoutManagedLayoutUpdated(Object sender, EventArgs e)
at Avalonia.Layout.LayoutManager.ExecuteLayoutPass()
at Avalonia.Layout.LayoutManager.ExecuteQueuedLayoutPass()
at Avalonia.Media.MediaContext.FireInvokeOnRenderCallbacks()
at Avalonia.Media.MediaContext.RenderCore()
at Avalonia.Media.MediaContext.Render()
at Avalonia.Threading.DispatcherOperation.InvokeCore()
at Avalonia.Threading.DispatcherOperation.Execute()
at Avalonia.Threading.Dispatcher.ExecuteJob(DispatcherOperation job)
at Avalonia.Threading.Dispatcher.ExecuteJobsCore(Boolean fromExplicitBackgroundProcessingCallback)
at Avalonia.Threading.Dispatcher.Signaled()
at Avalonia.Win32.Win32Platform.WndProc(IntPtr hWnd, UInt32 msg, IntPtr wParam, IntPtr lParam)
at Avalonia.Win32.Interop.UnmanagedMethods.DispatchMessage(MSG& lpmsg)
at Avalonia.Win32.Win32DispatcherImpl.RunLoop(CancellationToken cancellationToken)
at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl)
at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken)
at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.StartCore(String[] args)
at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args)
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(AppBuilder builder, String[] args, Action`1 lifetimeBuilder)
at VLCErrorProject.Program.Main(String[] args) in D:\temp\temp\VLCErrorProject\VLCErrorProject\Program.cs:line 11
Как правильно выгрузить VideoPlayer и VediowView из визуального дерева с его содержимым?
ПРИМЕЧАНИЕ. Мне нужно визуализировать некоторый контент поверх видео, если оно существует.
Подробнее здесь: https://stackoverflow.com/questions/793 ... th-content
Мобильная версия