c# - wpf 两个滚动条值同步
问题描述
第一个滚动条代表从最小值到第二个滚动条的值,第二个滚动条代表从最小值到最大值的值。
所以当我改变我的最大值或最小值时,我的第二个滚动条可以正常工作(缩放)。而且当我使用我的第一个滚动条时,我的第二个滚动条没有缩放 - 它应该是怎样的。
当我使用第二个滚动条并将我的当前值设置为低于第一个滚动条的值时,就会出现问题。当我的第二个滚动条值变得低于(第一个滚动条的最大值)时,是否有可能以某种方式更改第一个滚动条值。以某种方式同步第一个滚动条的最大值和第二个滚动条的当前值,因此当我将第二个滚动条值设置为低于第一个滚动条的最大值时,它也会更改第一个滚动条的最大值。
<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));
}
}
}
我还更改了 XAML 中的 DataContext 和绑定值。
当我添加这个错误的代码时,一切正常:
if (Scale.YellowFinishTag < Scale.RedFinishTag)
{
Scale.RedFinishTag = Scale.YellowFinishTag;
}
解决方案
推荐阅读
- python - 将列表转换为数组的 Numpy 问题
- swift - 放弃对 iOS 12 的支持时仍会收到 INStartAudioCallIntent (INStartCallIntent)
- java - 如果自动增量字段不是第一个,jOOQ 可以支持复合主键吗
- python - 从字典中删除对象
- ruby - 是否可以“重新推送”在 rubygems.org 上以相同版本发布的 yanked 版本 gem?
- php - 使用 str_replace 在韩语字符中显示菱形问号字符
- vue.js - 通过分页在 b-table 上显示剩余的 API 数据
- python - 当列表的元素值为列表时如何在Python中摆脱列表
- arrays - Powershell:单击 GUI 上的按钮移动到数组中的下一个项目
- amp-html - 如何在使用 CKEDITOR 动态创建的正文部分中显示来自非 AMP 标记的 AMP 标记