Первая полоса прокрутки представляет значение от минимального значения до второй полосы прокрутки, а вторая полоса прокрутки представляет значение от минимального до максимального значения.
Поэтому, когда я меняю максимальное или минимальное значение, моя вторая полоса прокрутки работает правильно (scailing).А также, когда я использую свою первую полосу прокрутки, моя вторая не масштабируется - как и должно быть.
Проблема возникает, когда я использую вторую полосу прокрутки и устанавливаю текущее значение ниже значения первой полосы прокрутки.,Возможно ли как-то изменить значение первой полосы прокрутки, когда значение моей второй полосы прокрутки становится меньше (максимальное значение первой полосы прокрутки).Каким-то образом синхронизируется максимальное значение первой полосы прокрутки и текущее значение второй, поэтому, когда я устанавливаю значение второй полосы прокрутки ниже максимального значения первого, оно также меняет максимальное значение первой полосы прокрутки.
<ScrollBar Name="FirstScrollBar"
Minimum="{Binding Path=startValue}"
Maximum="{Binding Path=yellowFinishTag, Mode=TwoWay}"
Value="{Binding Path=redFinishTag, Mode=TwoWay}"/>
<ScrollBar Name="SecondScrollBar"
Minimum="{Binding Path=startValue, Mode=TwoWay}"
Maximum="{Binding Path=endValue, Mode=TwoWay}"
Value="{Binding Path=yellowFinishTag, Mode=TwoWay}"/>
Модель:
public class Scale
{
public float startValue { get; set; }
public float endValue { get; set; }
public float redFinishTag { get; set; }
public float yellowFinishTag { get; set; }
//Marks
public float markFromValue { get; set; }
public float markToValue { get; set; }
public Scale()
{
}
public ScaleDTO(float startValue, float endValue, float redFinishTag, float yellowFinishTag)
{
this.startValue = startValue;
this.endValue = endValue;
this.redFinishTag = redFinishTag;
this.yellowFinishTag = yellowFinishTag;
}
}
ОБНОВЛЕНИЕ Я добавил MVVM-подход в свой проект, чтобы исправить это.Моя ScaleViewModel:
public class ScaleViewModel : INotifyPropertyChanged
{
Scale scale;
public ScaleViewModel()
{
scale = new Scale(0,100,0,0);
}
public Scale Scale
{
get
{
return scale;
}
set
{
scale = value;
}
}
public float StartValue
{
get { return scale.startValue; }
set
{
if (scale.startValue != value)
{
scale.startValue = value;
RaisePropertyChanged("StartValue");
}
}
}
public float EndValue
{
get { return scale.endValue; }
set
{
if (scale.endValue != value)
{
scale.endValue = value;
RaisePropertyChanged("EndValue");
}
}
}
public float RedFinishTag
{
get { return scale.redFinishTag; }
set
{
if (scale.redFinishTag != value)
{
scale.redFinishTag = value;
RaisePropertyChanged("RedFinishTag");
}
}
}
public float YellowFinishTag
{
get { return scale.yellowFinishTag; }
set
{
if (scale.yellowFinishTag != value)
{
scale.yellowFinishTag = value;
RaisePropertyChanged("YellowFinishTag");
}
}
}
public float MarkFromValue
{
get { return scale.markFromValue; }
set
{
if (scale.markFromValue != value)
{
scale.markFromValue = value;
RaisePropertyChanged("MarkFromValue");
}
}
}
public float MarkToValue
{
get { return scale.markToValue; }
set
{
if (scale.markToValue != value)
{
scale.markToValue = value;
RaisePropertyChanged("MarkToValue");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
// take a copy to prevent thread issues
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Также я изменил DataContext и значения привязки в моем XAML.
Значение красной верхней границы выше, чем желтой.
Все отлично работает, когда я добавляю этот плохой код:
if (Scale.YellowFinishTag < Scale.RedFinishTag)
{
Scale.RedFinishTag = Scale.YellowFinishTag;
}