Volume Slider, как VLC - PullRequest
       34

Volume Slider, как VLC

5 голосов
/ 24 января 2012

Я ищу Volume Slider, который выглядит и ведет себя так же, как слайдер VLC.enter image description here

Я нашел следующий пост о том, как стилизовать слайдер: Регулятор громкости CustomControl но я также хочу такое же поведение ...

В чем разница между поведениями: когда вы нажимаете на ползунок [в WPF] и перемещаете мышь в области ползунка (пока кнопка мыши все еще удерживается) он должен перемещать ползунок также в положение мыши на ползунке.

Я не мог найти, как это сделать .. может быть, я должен использовать что-то другое, чем ползунок?

Спасибоза помощь!

1 Ответ

7 голосов
/ 24 января 2012

На ползунке есть свойство с именем IsMoveToPointEnabled , которое устанавливает ползунок на правильное значение, но только при нажатии он не обновляется при перетаскивании.

Для обновления при перетаскивании необходимо обновить значение самостоятельно при перемещении мыши, метод Track.ValueFromPoint дает правильное значение, дорожка является частью шаблона ползунков.

Пример

public class DraggableSlider : Slider
{
    public DraggableSlider()
    {
        this.IsMoveToPointEnabled = true;
    }

    private Track track;
    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        track = Template.FindName("PART_Track", this) as Track;
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);
        if(e.LeftButton == MouseButtonState.Pressed && track != null)
        {
            Value = track.ValueFromPoint(e.GetPosition(track));
        }
    }


    protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
    {
        base.OnPreviewMouseDown(e);
        ((UIElement)e.OriginalSource).CaptureMouse();
    }

    protected override void OnPreviewMouseUp(MouseButtonEventArgs e)
    {
        base.OnPreviewMouseUp(e);
        ((UIElement)e.OriginalSource).ReleaseMouseCapture();
    }
}

Переопределения OnPreviewMouseUp / Down захватывают мышь, я пробовал VLC, и это не захватывает мышь, поэтому вы можете удалить их, если хотите. Захват мыши позволяет изменять значение, даже если мышь покидает элемент управления, аналогично тому, как работают полосы прокрутки.

...