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.
Być może mógłbyś podać link do tego, czym jest suwak VLC i jakie jest jego zachowanie? – RBarryYoung
@RBarryYoung: [VLC] (http://www.videolan.org/) –
Nie jest jasne, o co prosisz o pomoc. Czy masz konkretne pytanie dotyczące programowania? –