Я использую ползунок, чтобы показать прогресс видеофайла, который воспроизводится в медиаэлементе. Я обновляю положение большого пальца с помощью таймера каждые 200 мс. Я также изменяю положение ползунка с помощью кнопки быстрой перемотки вперед / назад, которая меняет положение медиаэлемента.
проблема в том, что размер большого пальца изменяется во время воспроизведения медиаэлемента или когда я использую кнопку вперед / назад. Он становится толще, чем тоньше, это повторяется. Как я могу это исправить?
Здесь я загрузил видео, которое показывает странное поведение большого пальца
http://v7.tinypic.com/player.swf?file=2mw6xhx&s=7
вот код:
ползунок в xaml
<Slider Name="sliderPosition"
Width="220"
Margin="2"
ValueChanged="sliderPosition_ValueChanged"
Thumb.DragStarted="sliderPosition_DragStarted"
Thumb.DragCompleted="sliderPosition_DragCompleted" />
код позади
//initialization
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(200);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
private void OnMediaOpened(object sender, RoutedEventArgs e)
{
if (MediaElem.NaturalDuration.HasTimeSpan)
{
TimeSpan ts = TimeSpan.FromMilliseconds(MediaElem.NaturalDuration.TimeSpan.TotalMilliseconds * 0.95);
sliderPosition.Maximum = ts.TotalSeconds;
sliderPosition.SmallChange = 1;
sliderPosition.LargeChange = Math.Min(10, ts.Seconds / 10);
tbPosition.Text = String.Format("00:00:00");
tbDuration.Text = String.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds);
}
}
private void MoveForward(int millisec)
{
if ((MediaElem.Position.TotalMilliseconds + millisec) > (MediaElem.NaturalDuration.TimeSpan.TotalMilliseconds * 0.95))
{
MediaElem.Position = TimeSpan.FromMilliseconds(MediaElem.NaturalDuration.TimeSpan.TotalMilliseconds * 0.95);
}
else
{
MediaElem.Position = MediaElem.Position + TimeSpan.FromMilliseconds(millisec);
sliderPosition.Value = MediaElem.Position.TotalSeconds;
}
}
private void MoveBackward(int millisec)
{
if ((MediaElem.Position - TimeSpan.FromMilliseconds(millisec)) < TimeSpan.FromMilliseconds(0))
{
MediaElem.Position = TimeSpan.FromMilliseconds(0);
}
else
{
MediaElem.Position = MediaElem.Position - TimeSpan.FromMilliseconds(millisec);
sliderPosition.Value = MediaElem.Position.TotalSeconds;
}
}
private void sliderPosition_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
TimeSpan ts = TimeSpan.FromSeconds(e.NewValue);
tbPosition.Text = String.Format("{0:00}:{1:00}:{2:00}", ts.Hours, ts.Minutes, ts.Seconds);
MediaElem.Position = ts;
}
private void sliderPosition_DragStarted(object sender, DragStartedEventArgs e)
{
isDragging = true;
}
private void sliderPosition_DragCompleted(object sender, DragCompletedEventArgs e)
{
isDragging = false;
MediaElem.Position = TimeSpan.FromSeconds(sliderPosition.Value);
}
void timer_Tick(object sender, EventArgs e)
{
if (!isDragging && isPlaying)
{
sliderPosition.Value = MediaElem.Position.TotalSeconds;
}
}