Проблема:
Когда я нажимаю на дорожку ползунка или заканчиваю перетаскивание ползунка для поиска, ползунок часто «прыгает» обратно в предыдущее положение на долю секунды, прежде чем, наконец, переместиться в правильное новое время.
Как это исправить?
код:
Код: Выделить всё
using LibVLCSharp.Shared;
using Microsoft.Win32;
using System.Windows;
using System.Windows.Controls;
namespace NUR.Views
{
public partial class VideoForm : UserControl
{
private LibVLC _libVLC;
private MediaPlayer _mediaPlayer;
private bool _isDragged = false;
public VideoForm()
{
InitializeComponent();
Core.Initialize();
_libVLC = new LibVLC();
_mediaPlayer = new MediaPlayer(_libVLC);
videoPlayer.MediaPlayer = _mediaPlayer;
_mediaPlayer.TimeChanged += (s, e) =>
{
Dispatcher.Invoke(() =>
{
if (_isDragged == false)
{
videoTimeline.Value = e.Time;
}
});
};
_mediaPlayer.LengthChanged += (s, e) =>
{
Dispatcher.Invoke(() =>
{
videoTimeline.Maximum = e.Length;
});
};
_mediaPlayer.EndReached += (s, e) =>
{
Dispatcher.Invoke(() =>
{
videoTimeline.Value = videoTimeline.Maximum;
});
};
}
private void openBtn_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Multiselect = false;
openFileDialog.Filter = "Media files|*.mp4;*.wmv;*.mp3";
if (openFileDialog.ShowDialog() == true)
{
videoTimeline.Value = 0;
videoTimeline.Maximum = 100;
var media = new Media(_libVLC, new Uri(openFileDialog.FileName));
_mediaPlayer.Play(media);
}
}
private void videoTimeline_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
_isDragged = true;
}
private void videoTimeline_PreviewMouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (_mediaPlayer != null && videoTimeline.Maximum > 0)
{
float newPosition = (float)(videoTimeline.Value / videoTimeline.Maximum);
_mediaPlayer.Position = newPosition;
}
_isDragged = false;
}
}
}
Код: Выделить всё
IsMoveToPointEnabled="True"