2012-01-24 11 views
5

Szukam suwaka głośności, który wygląda i działa tak, jak suwak VLC.
enter image description hereSuwak głośności podobny do VLC

znalazłem następującą wiadomość o tym, jak projektować suwak: Volume Slider CustomControl
ale również ma takie samo zachowanie ...

Jaka jest różnica między zachowań: Po kliknięciu na suwak [na WPF] i przesuń mysz po obszarze suwaka (gdy przycisk myszy jest nadal trzymany) powinien przesunąć suwak także do pozycji myszy na suwaku.

Nie mogłem znaleźć tego sposobu. Może powinienem użyć czegoś innego niż Slider?

Dzięki za pomoc!

+0

Być może mógłbyś podać link do tego, czym jest suwak VLC i jakie jest jego zachowanie? – RBarryYoung

+0

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

+0

Nie jest jasne, o co prosisz o pomoc. Czy masz konkretne pytanie dotyczące programowania? –

Odpowiedz

7

Na suwaku znajduje się właściwość o nazwie IsMoveToPointEnabled, która ustawia suwak na prawidłową wartość, ale tylko wtedy, gdy go klikniesz, nie zostanie zaktualizowana podczas przeciągania.

Aby zaktualizować podczas przeciągania, należy samodzielnie zaktualizować wartość po przesunięciu myszy, metoda Track.ValueFromPoint podaje poprawną wartość, a ścieżka jest częścią szablonu suwaków.

Przykład

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

W OnPreviewMouseUp/dół nadpisania uchwycić myszy, próbowałem VLC i że nie przechwytuje myszy więc można je usunąć, jeśli chciał. Przechwytywanie myszy umożliwia zmianę wartości nawet wtedy, gdy mysz pozostawia kontrolkę podobną do działania pasków przewijania.

+0

Działa idealnie! Dziękuję Ci bardzo! – Ron