我目前正在使用WPF中的滑塊。我的GUI窗口有兩個滑塊,它們應該以幾種方式一起工作。 slider1
必須始終小於或等於slider2
,並且slider2
必須始終大於或等於slider1
。我的第一次嘗試使用C#代碼隱藏來解決這個問題記錄在我的previous question中。這個問題讓我的代碼能夠編譯,但在運行時沒有影響我的程序中的任何視覺變化。將這些滑塊以我需要的方式運行的理想方法是什麼?如何使滑塊匹配值
謝謝。
我目前正在使用WPF中的滑塊。我的GUI窗口有兩個滑塊,它們應該以幾種方式一起工作。 slider1
必須始終小於或等於slider2
,並且slider2
必須始終大於或等於slider1
。我的第一次嘗試使用C#代碼隱藏來解決這個問題記錄在我的previous question中。這個問題讓我的代碼能夠編譯,但在運行時沒有影響我的程序中的任何視覺變化。將這些滑塊以我需要的方式運行的理想方法是什麼?如何使滑塊匹配值
謝謝。
爲了您的方便,您也可以做到這一點..
private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (slider1 == null || slider2 == null)
return;
if (slider1.Value >= slider2.Value)
{
slider2.Value = slider1.Value;
}
}
private void slider2_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (slider1 == null || slider2 == null)
return;
if (slider2.Value <= slider1.Value)
{
slider1.Value = slider2.Value;
}
}
比方說,你的視圖模型有兩個屬性Slider1
和Slider2
和你的XAML看起來是這樣的:
<Slider Value="{Binding Path=Slider1}"/>
<Slider Value="{Binding Path=Slider2}"/>
那麼當Slider1
或Slider2
改變,你可以做你的邏輯視圖模型:
public class MyClass: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
private double _slider1;
public double Slider1
{
get { return _slider1; }
set
{
if (_slider1 != value)
{
_slider1 = value;
OnPropertyChanged("Slider1");
if (_slider1 > Slider2) Slider2 = _slider1;
}
}
}
private double _slider2;
public double Slider2
{
get { return _slider2; }
set
{
if (_slider2 != value)
{
_slider2 = value;
OnPropertyChanged("Slider2");
if (_slider2 < Slider1) Slider1 = _slider2;
}
}
}
}
感謝您的幫助! –