3つのスライダーコントロールを積み重ねて「レンジスライダー」を作成しています。基本的な考え方は、ここから2つのスライダーを使用することです。
3番目のスライダーを追加します。このスライダーの親指は、他のスライダーの親指の間のスペースを埋めます。ユーザーは、この中央の親指をドラッグして両端を移動し、両端の間隔を一定に保つことができます。
XAMLは単純に3つのスライダーです。うまくレイヤー化する秘訣は、コントロールテンプレートを使用することです(ここでは再現されていません。上記のURLで見つけることができます)。
<Grid VerticalAlignment="Top">
<Border BorderThickness="0,1,0,0" BorderBrush="Green" VerticalAlignment="Center" Height="1"
Margin="5,0,5,0"/>
<Slider x:Name="LowerSlider"
Minimum="{Binding ElementName=root, Path=Minimum}"
Maximum="{Binding ElementName=root, Path=Maximum}"
Value="{Binding ElementName=root, Path=LowerValue, Mode=TwoWay}"
Margin="0,0,0,0"
Template="{StaticResource simpleSlider}"
/>
<Slider x:Name="MiddleSlider"
Minimum="{Binding ElementName=root, Path=Minimum}"
Maximum="{Binding ElementName=root, Path=Maximum}"
Value="{Binding ElementName=root, Path=MiddleValue, Mode=TwoWay}"
Margin="10,0,0,0"
Template="{StaticResource simpleSlider}"
>
</Slider>
<Slider x:Name="UpperSlider"
Minimum="{Binding ElementName=root, Path=Minimum}"
Maximum="{Binding ElementName=root, Path=Maximum}"
Value="{Binding ElementName=root, Path=UpperValue, Mode=TwoWay}"
Margin="20,0,0,0"
Template="{StaticResource simpleSlider}"
/>
</Grid>
どちらかの外側の親指をドラッグしたら、中央の親指のサイズを変更して、2つの端の親指の間のスペースを埋める必要があります。
背後のコードでは、親指の動きをキャッチでき、中央のスライダーコントロールを見つけることができますが、プログラムで中央のスライダーの親指に到達して、サイズを変更して2つの外側の親指の間のスペース。
private void UpperSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
Slider slider= (Slider) this.FindName("MiddleSlider");
// how to find the middleSlider thumb so I can set
// it's width to fill the space between the outer thumbs
}
アイデアをありがとう、
ミッチ