0

我目前正在使用 WPF 中的滑块。我的 GUI 窗口有 2 个滑块,它们应该以几种方式一起起作用。slider1必须始终小于或等于slider2,并且slider2必须始终大于或等于slider1。我第一次尝试使用 C# 代码隐藏来解决这个问题记录在我之前的问题中。这个问题让我的代码得以编译,但在运行时并没有影响我的程序的任何视觉变化。使这些滑块以我需要的方式运行的理想方法是什么?

谢谢你。

4

2 回答 2

2

假设您的 ViewModel 有 2 个属性Slider1Slider2并且您的 XAML 看起来像这样:

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

然后你可以在 ViewModel 中执行你的逻辑,当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;
          }
      }
  }
}
于 2013-07-18T14:13:57.507 回答
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;
        }


    }
于 2013-07-18T14:24:44.243 回答