ползунок wpf изменяет размер во время движения - PullRequest
1 голос
/ 30 мая 2011

Я использую ползунок, чтобы показать прогресс видеофайла, который воспроизводится в медиаэлементе. Я обновляю положение большого пальца с помощью таймера каждые 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;
    }
}

1 Ответ

0 голосов
/ 30 июня 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...