【发布时间】:2020-07-29 19:04:05
【问题描述】:
我正在使用滑块来控制正在播放的 MediaElement 的位置。我已经实现了 ValueChanged 事件来同步滑块的位置和值。因此,当我在 Thumb 上拖动时,MediaElement 的位置也会发生变化。但是,这会造成糟糕的用户体验。理想的情况应该是,在用户完成滑动后,MediaElement 会跳转到最终位置。所以我正在寻找像 AfterSliding 这样的事件/处理程序。
我见过像使用 OnThumbDragCompleted 这样的解决方案。但是,这些问题是关于 WPF 的,我在 UWP 中找不到这样的问题。有人有解决方法吗?
当前:
private void ProgressBar_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
MediaPlayer.Position = TimeSpan.FromSeconds(e.NewValue);
LeftTimeTextBlock.Text = MusicDurationConverter.ToTime((int)e.NewValue);
}
预期:
private void ProgressBar_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
if (!isDragging || slidingFinished) MediaPlayer.Position = TimeSpan.FromSeconds(e.NewValue);
LeftTimeTextBlock.Text = MusicDurationConverter.ToTime((int)e.NewValue);
}
---更新---
我有一个每秒计时的计时器,但是当我点击滑块(不是拇指)区域时,并不总是触发点击事件,因此拇指会在点击的位置和它的新位置之间来回移动。我该如何解决它,以便当用户仍然握住拇指时,它会保持在点击的位置?我猜这个 tapped 事件可能不是我应该使用的。
public void Tick()
{
if (ShouldUpdate && !SliderClicked)
{
MediaSlider.Value = MediaControl.Player.PlaybackSession.Position.TotalSeconds;
}
SliderClicked = false;
}
private void MediaSlider_Tapped(object sender, TappedRoutedEventArgs e)
{
Debug.WriteLine("Tapped");
MediaControl.SetPosition(MediaSlider.Value);
SliderClicked = true;
}
private void MediaSlider_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
MediaControl.SetPosition(MediaSlider.Value);
ShouldUpdate = true;
Debug.WriteLine("Completed");
}
private void MediaSlider_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
ShouldUpdate = false;
Debug.WriteLine("Started");
}
【问题讨论】:
-
请提供您的代码,看看我们如何帮助您解决问题
-
@sayahimad 我不确定要放什么代码,因为我只是在寻找一些事件而不是调试我的模式。