большой палец ползунка wpf меняет размер при перемещении

#c# #wpf #slider

#c# #wpf #ползунок

Вопрос:

Я использую ползунок, чтобы показать ход видеофайла, который воспроизводится в mediaelement. Я обновляю положение большого пальца с помощью таймера каждые 200 мс. Я также изменяю положение ползунка с помощью кнопки быстрой перемотки вперед / назад, которая изменяет положение элемента mediaelement. проблема в том, что размер большого пальца меняется во время воспроизведения mediaelement или когда я использую кнопку вперед / назад. Он становится толще, затем снова тоньше, это повторяется. Как я могу это исправить?

Здесь я загрузил видео, которое показывает странное поведение большого пальца http://v7.tinypic.com/player.swf?file=2mw6xhxamp;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 amp;amp; isPlaying)
    {
    sliderPosition.Value = MediaElem.Position.TotalSeconds;
    }
}
  

Комментарии:

1. Нам нужно увидеть соответствующие фрагменты кода, чтобы иметь возможность помочь. Например, как вы перемещаете большой палец? Это стандартный элемент управления ползунком или пользовательский, который вы создали?

2. никто никогда не сталкивался с этой проблемой?

3. Я могу воспроизвести эту проблему. Даже без элемента media (просто создайте слайдер и установите таймер для его увеличения каждые n мс). Проблема менее заметна, если увеличивать полные целые числа больше, чем в два раза, но она определенно есть.

Ответ №1:

Определенно существует проблема с тем, как рисуется большой палец. При запуске под Windows 7/64 большой палец ползунка перемещается ужасно. Большой палец нарисован с использованием модных модулей темы Aero-mode и тому подобного из коробки; Поэтому, по наитию, я запустил Blend и добавил «SimpleSlider», который является обычным с полностью настраиваемым и автономным стилем и шаблоном. Как только я это сделал, большой палец начал двигаться очень плавно.

Вы могли бы попробовать стиль SimpleSlider или создать свой собственный шаблон с нуля.