間隔の値を表示するには、2つのスライダを使用します。 範囲は、たとえば0〜100で、スライダのminおよびmaxプロパティで設定されます。 私は、スライダの値が互いに伝わらないことを確認したいと思います。インターバルの低い方の値のスライダの親指は、2番目のスライダの値を超えてドラッグしてはならず、その逆もありません。相互依存型スライダの範囲を制限する方法は?
最初のスライダの値を他のスライダのmin/maxプロパティの1つにバインドすると、その範囲が変更されるため、最初のスライダの変更中に2番目のスライダの親が移動されます。だから私は両方のスライダの範囲を固定したままにしたい。
どのようにして親指の動きを制限できますか?
ありがとうございます!
アップデート:私はOnSliderMovedで処理されValueChangedイベントをサブスクライブ私の添付プロパティで
:これにより
private static void OnSliderMoved(object sender, RoutedPropertyChangedEventArgs<double> args)
{
double min = GetMin((DependencyObject)sender);
double max = GetMax((DependencyObject)sender);
if (sender is Slider)
{
var sld = (Slider)sender;
var currentValue = sld.Value;
//check if the value has changed at all
if (Math.Abs(args.NewValue - args.OldValue) < 0)
{
args.Handled = true;
return;
}
double val = 0.0;
var result = ValidationResult.Ok;
try
{
try
{
val = Convert.ToDouble(currentValue, CultureInfo.InvariantCulture);
val = Math.Round(val + 0.0005, 3);
}
catch (Exception e)
{
throw;
}
result = ExceedsLimits(val, (double)minimum, (double)maximum);
}
catch (OverflowException)
{
result = ValidationResult.TooLarge;
}
switch (result)
{
case ValidationResult.TooLarge:
// reset the slider value to maximum
sld.Value = max;
args.Handled = true;
break;
case ValidationResult.TooSmall:
// reset the slider value to minimum
sld.Value = min;
args.Handled = true;
break;
case ValidationResult.Ok:
BindingExpression binding = BindingOperations.GetBindingExpression(sld, RangeBase.ValueProperty);
if (binding != null)
{
binding.UpdateSource();
}
break;
}
}
}
<Slider x:Name="sldMaxPercent"
Value="{Binding SomeValue, UpdateSourceTrigger=Explicit,
Converter={optimat:DoulbeToPercentForSliderConverter}}"
Maximum="100"
Minimum="0"
input:InputService.Min="{Binding ElementName=sldMinPercent, Path=Value, UpdateSourceTrigger=PropertyChanged}"
input:InputService.Max="100"
IsMoveToPointEnabled="True"
IsSelectionRangeEnabled="True"
IsSnapToTickEnabled="True"
TickFrequency="0.1">
、親指の動きは、私が望んでいる、停止します。 問題は、ブロックされた方向にマウスをドラッグし続けても、親指がその方向に動いていなくても、バインディングが更新されるということです。
バインディングの更新を中断するにはどうすればよいですか?
このような単純なビューモデルの使用が期待される動作になるはずです
あなたのスライダーを動かし、それ以上移動できるかどうかを確認することができます。 ValueChangedイベントを使用するだけです。 – MacakM
たとえば、次のような範囲スライダコントロールを使用できます。この1つ:http://mahapps.com/controls/range-slider.html – Clemens
@マカクM:ありがとう、それは私が探していたものでした。 OnValueChangedを使用してValueが希望の範囲内にあるかどうかを確認するために、添付プロパティを作成しました。 – tabina