2012-01-24 21 views
5

Estoy buscando Control deslizante de volumen que se ve y se comporta como el control deslizante de VLC.
enter image description hereControl deslizante de volumen como VLC

me encontré con el siguiente post sobre cómo el estilo del control deslizante: Volume Slider CustomControl
pero también quiero el mismo comportamiento ...

¿Cuál es la diferencia entre los comportamientos: Al hacer clic en el deslizador [en el WPF] y mueva el mouse en el área del control deslizante (mientras el botón del mouse sigue en espera) debe mover el control deslizante también a la posición del mouse en el control deslizante.

No he podido encontrar la forma de hacerlo ... ¿quizás debería usar algo diferente a Slider?

¡Gracias por la ayuda!

+0

Quizás podría proporcionar un enlace a lo que es un control deslizante VLC y su comportamiento es? – RBarryYoung

+0

@RBarryYoung: [VLC] (http://www.videolan.org/) –

+0

No está claro con qué está pidiendo ayuda aquí. ¿Tienes una pregunta de programación específica? –

Respuesta

7

Hay una propiedad en el control deslizante llamada IsMoveToPointEnabled que establece el control deslizante en el valor correcto, pero solo cuando hace clic no se actualiza a medida que arrastra.

Para actualizar a medida que arrastra debe actualizar el valor usted mismo cuando se mueve el mouse, el método Track.ValueFromPoint le da el valor correcto, la pista es parte de la plantilla de controles deslizantes.

Ejemplo

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(); 
    } 
} 

Los OnPreviewMouseUp/Abajo anulaciones de capturar el ratón, traté de VLC y que no captura el ratón por lo que podría eliminarlos si querías. La captura del mouse permite que el valor cambie incluso si el mouse deja el control de forma similar a como funcionan las barras de desplazamiento.

+0

¡Funciona perfecto! ¡Muchas gracias! – Ron

Cuestiones relacionadas