当滑块拇指移动绑定到计时器时,鼠标单击WPF(时间)滑块无效
我使用MediaElement和(时间)滑块来播放和控制视频的播放。 我用它作为基地 除了拖动功能,我还希望滑块拇指移动到鼠标点击点。 当MediaElement和(时间)滑块暂停时,此功能正常工作,但在播放视频时,鼠标单击无效 这是我的密码 XAML:当滑块拇指移动绑定到计时器时,鼠标单击WPF(时间)滑块无效,wpf,slider,Wpf,Slider,我使用MediaElement和(时间)滑块来播放和控制视频的播放。 我用它作为基地 除了拖动功能,我还希望滑块拇指移动到鼠标点击点。 当MediaElement和(时间)滑块暂停时,此功能正常工作,但在播放视频时,鼠标单击无效 这是我的密码 XAML: <MediaElement Source="..." Name="mediaView" Height="450" LoadedBehavior="Manual" UnloadedB
<MediaElement Source="..."
Name="mediaView"
Height="450" LoadedBehavior="Manual" UnloadedBehavior="Stop" Stretch="UniformToFill"
MediaOpened="OnMediaOpened" MediaEnded="OnMediaEnded" MediaFailed="OnMediaFailed" Grid.Row="0" Grid.Column="0"/>
<Grid Name="mediaBar" VerticalAlignment="Bottom" Margin="5,10,5,0" Background="#B2282828" Grid.Row="0" Grid.Column="0">
<!-- ... -->
<Slider Name="timeSlider" Margin="5,5,5,0"
Thumb.DragStarted="OnDragStarted" Thumb.DragCompleted="OnDragCompleted" ValueChanged="OnTimeSliderValueChanged"
PreviewMouseLeftButtonUp="OnMouseLeftButtonUp" IsMoveToPointEnabled="True"
MinWidth="200" FlowDirection="LeftToRight"
Grid.Column="4" Cursor="ScrollWE" VerticalAlignment="Center"/>
<!-- ... -->
</Grid>
private void OnDragStarted(object sender, DragStartedEventArgs args)
{
isDragging = true;
ticks.Stop();
}
private void OnDragCompleted(object sender, DragCompletedEventArgs args)
{
isDragging = false;
int SliderValue = (int)timeSlider.Value;
TimeSpan ts = new TimeSpan(0, 0, 0, 0, SliderValue);
mediaView.Position = ts;
if(currentStatus == Status.PLAYING)
ticks.Start();
}
private void OnMouseLeftButtonUp(object sender, EventArgs ea)
{
if(!isDragging)
{
mediaView.Pause();
ticks.Stop();
int SliderValue = (int)timeSlider.Value; // when video is playing this not the point of the mouse click
// ...
}
}
我可以理解,timeSlider.Value
在播放视频时提供当前时间点,而不是鼠标单击位置
有没有其他方法可以测量鼠标单击的位置并用它更新滑块值
或者在滑块运行时单击鼠标的更好解决方案?试试这个:
private void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs ea)
{
mediaView.Position = TimeSpan.FromSeconds((int)(mediaView.NaturalDuration.TimeSpan.TotalSeconds * (double)(ea.GetPosition(timeSlider).X / this.Width)));
}
此.Width或timeSlider.Width不起作用,因为timeSlider位于网格列definition Width=“200*”,最后timeSlider.ActualWidth成功了。谢谢你的帮助!