2017-07-18 10 views
-1

私は上書きしたい親指のコントロールテンプレートをオーバーライドしてきた私はスライダーでいくつかの奇妙な(しかし、論理的な)行動に気付いています。これは完全なXAMLではありませんが、重要な部分です。赤い矩形はグリップで、中央に白い水平線があります。背後にあるコードではスライダーは値に影響しますか?

<Slider VerticalAlignment="Center" 
     Orientation="Vertical" 
     IsMoveToPointEnabled="True"/> 

<ControlTemplate TargetType="{x:Type Thumb}"> 
     <Grid Margin="0,1,0,1" SnapsToDevicePixels="True"> 
      <Border Name="PART_Border" 
        Background="White" 
        Height="1"/> 
      <Rectangle x:Name="PART_Grip" Fill="Red" Height="50" Width="15" ClipToBounds="True"/> 
     </Grid> 
</ControlTemplate> 

私はスライダーのスタイルで親指にテンプレートをフック場合、それは私が欲しいものである。このような素晴らしい小さなスライダーを与えます。私はそれを周りにスライド始めると

しかし、私はあなたがRectangleを持っているときの機能が若干異なっていることに気づきます。あなたのドラッグアップとして、Thumbは、トラックの終わりに達した(粗雑ここでは緑色で示された)が、Thumbは白い線が正しくトラックの目盛りの値と整合しないことを意味し、長方形の上部に停止します。

あなたはGridからRectangle PART_Gripを削除し、このようにすべての方法を、それを上にスライドした場合には、白いラインがそうのように、最後の目盛りに合わせます。

<ControlTemplate TargetType="{x:Type Thumb}"> 
      <Grid Margin="0,1,0,1" SnapsToDevicePixels="True"> 
       <Border Name="PART_Border" 
         Background="White" 
         Height="1"/> 
      </Grid> 
</ControlTemplate> 

1は、矩形がトラックの終わりが、WHIを超えて行くことが可能になりますように GridRectangleを配置する方法を

テラインはダニと整列され、それでもセンタリングされますか?私が働いており、代わりにAdornerとしてRectangleを試してみましたが、あなたが親指を上にドラッグすることができませんでしたので、適切にDragDeltaThumb上をトリガすることができていないようでした。おそらくAdornerルートを行くことなくダニの機能を無効にしてRectangle高さによって相殺する方法はありますか?

私が見てみたいもの:

enter image description here

答えて

0

私はこれを行うには、2つの異なる方法を見つけました。

直負のマージンは、この場合、これはうまく機能50

<Grid Margin="0,-25,0,-25"> 

あるGripの1/2高さであるオフセット。

もう少し複雑な方法:キャンバスをネストし、Gripに直接マージします。

<Grid> 
    <Border/> 
    <Canvas> 
     <Rectangle x:Name="PART_Grip" Margin="0, -25, 0, 0"/> 
    </Canvas> 
</Grid> 

キャンバスを使用すると、グリップをマウスに簡単に追従させることができます。 もちろん、向きが水平の場合は、これは機能します。これは、高さではなく幅であり、左の余白ではなく上端です。

関連する問題