2012-01-24 4 views
5

VLCのスライダのように見え、動作するボリュームスライダを探しています。あなたはをクリックすると :行動の違いは何Volume Slider CustomControl
が、私も同じ動作をしたい...VLCのようなボリュームスライダ

enter image description here


私はスライダーのスタイルをする方法について、以下の記事を見つけましたスライダ[WPFで]を押しながらスライダ領域にマウスを移動すると(マウスボタンがまだ押されている間)、スライダもスライダ上のマウスの位置に移動する必要があります。

私はそれを行う方法を見つけることができませんでした..たぶん私はスライダーとは異なるものを使用する必要がありますか?

ありがとうございました!

+0

おそらく、VLCスライダーとその動作のリンクを提供することができますか? – RBarryYoung

+0

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

+0

ここで助けを求めているのははっきりしない。特定のプログラミングに関する質問がありますか? –

答えて

7

スライダーには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 /ダウンオーバーライドがマウスをキャプチャし、私はVLCを試してみましたが、あなたが望んでいた場合は、それらを削除できるようそれがマウスをキャプチャしません。マウスをキャプチャすると、スクロールバーの動作と同様にコントロールからマウスを離しても値が変更されます。

+0

完璧に動作します!どうもありがとうございました! – Ron

関連する問題