Как перемещаться между пользовательскими элементами управления при использовании VLC VideoView с контентомC#

Место общения программистов C#
Ответить
Anonymous
 Как перемещаться между пользовательскими элементами управления при использовании VLC VideoView с контентом

Сообщение Anonymous »

Дело в том, что у меня есть двухстраничное приложение avalonia. MainWindow имеет простую навигацию для выбора страницы для отображения, как показано ниже:
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()
};
}
}
MainWindow.axaml на первой странице есть VideoPlayer (LibVLCSharp) для воспроизведения видео, а вторая представляет собой просто пустую страницу.
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();
}
}
FirstView.axaml Визуализированный результат
Изображение
Проблема
Когда у 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»