2013-07-18 22 views
0

我目前正在使用WPF中的滑塊。我的GUI窗口有兩個滑塊,它們應該以幾種方式一起工作。 slider1必須始終小於或等於slider2,並且slider2必須始終大於或等於slider1。我的第一次嘗試使用C#代碼隱藏來解決這個問題記錄在我的previous question中。這個問題讓我的代碼能夠編譯,但在運行時沒有影響我的程序中的任何視覺變化。將這些滑塊以我需要的方式運行的理想方法是什麼?如何使滑塊匹配值

謝謝。

回答

1

爲了您的方便,您也可以做到這一點..

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; 
     } 


    } 
+0

感謝您的幫助! –

2

比方說,你的視圖模型有兩個屬性Slider1Slider2和你的XAML看起來是這樣的:

<Slider Value="{Binding Path=Slider1}"/> 
<Slider Value="{Binding Path=Slider2}"/> 

那麼當Slider1Slider2改變,你可以做你的邏輯視圖模型:

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; 
      } 
     } 
    } 
}